Люк Matplotlib не работает после обновления до версии 2.1.2

Я обновил matplotlib с версии 2.0.0 до 2.1.2, и мои штриховки больше не отображаются. Для удобства я беру тот же пример, что и в предыдущем вопросе (Метка оси, скрытая ось на графике?)

Если я запускаю этот код в своей среде Python (python 3.5.2) с более старой версией matloblib, он отображает штриховку, после обновления matplotlib этого не происходит. Как мне еще отобразить люк?

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import random

data = random.sample(range(100), 5)
data[0] = 100
data[3] = 50
index = ['industry', 'residential', 'agriculture', 'transport', 'other']
df1 = pd.DataFrame(data, index=index, columns=['data'])
df2 = pd.DataFrame(np.array(data)/2, index=index, columns=['data'])

fig = plt.figure()

ax = fig.add_subplot(111, projection="polar")

ax.grid(True)
ax.yaxis.grid(color='r')  
ax.xaxis.grid(color='#dddddd')  

for spine in ax.spines.values():
    spine.set_edgecolor('None')

theta = np.arange(len(df1))/float(len(df1))*2.*np.pi

l1, = ax.plot(theta, df1["data"], color="gold", marker="o", label=None, zorder=1)  # , zorder = -3)
l2, = ax.plot(theta, df2["data"], color='tomato', marker="o", label=None, zorder=1.1)  #, zorder =-2)

def _closeline(line):
    x, y = line.get_data()
    x = np.concatenate((x, [x[0]]))
    y = np.concatenate((y, [y[0]]))
    line.set_data(x, y)
[_closeline(l) for l in [l1, l2]]

mpl.rcParams['hatch.color'] = 'red'
ax.fill(theta, df1["data"], edgecolor="gold", alpha=1, color = 'None', zorder=1)
ax.fill(theta, df2["data"], edgecolor='tomato', hatch='///', color = 'None', zorder=2)

ax.set_rlabel_position(216)
ax.set_xticks(theta)
ax.set_xticklabels(df2.index, fontsize=12)#, zorder=1)
for it in np.arange(len(theta)):   
    txt = ax.text(theta[it], 100*1.1, index[it], va = 'center', ha = 'center', fontsize = 12)

ax.set_xticklabels('')
legend = plt.legend(handles=[l1,l2], labels =['first','second'], loc='lower right')

plt.title("data [unit]", fontsize = 16, y = 1.2)

plt.show()

person esperluette    schedule 26.01.2018    source источник
comment
Можете ли вы четко указать, каков желаемый результат или как он выглядел в предыдущей версии по сравнению с тем, как он выглядит сейчас? Есть некоторые цвета: красный, золотой, ни один из них не задействован, но какая часть должна быть раскрашена как?   -  person ImportanceOfBeingErnest    schedule 27.01.2018
comment
Внутри внутренней фигуры должна быть заштрихованная заливка (которая отлично отображается со старой версией matplolib, без изменения моего кода)   -  person esperluette    schedule 27.01.2018
comment
Я это понимаю. Но я спрашиваю, как именно вы хотите, чтобы патч выглядел (похоже, есть некоторое противоречие между edgecolor и hat.color). Просто опишите, как это должно выглядеть, независимо от того, что какой-то код выдал другой результат в какой-то предыдущей версии.   -  person ImportanceOfBeingErnest    schedule 27.01.2018
comment
В понедельник выложу фото. Но я должен видеть наклонные красные линии на центральной фигуре.. Вроде этого ///   -  person esperluette    schedule 27.01.2018


Ответы (1)


Чтобы получить заштрихованную область в matplotlib без фона, вы можете установить fill=False.

ax.fill(..., hatch='///', edgecolor="gold", fill=False)

Полный пример:

import matplotlib.pyplot as plt
import numpy as np

a = np.array([[0, 0], [1, 0.2], [1, 1.2], [0, 1.]])

fig, ax = plt.subplots()

ax.fill(a[:,0],a[:,1], hatch='///', edgecolor="gold", alpha=1, fill=False)

plt.show()

введите здесь описание изображения

person ImportanceOfBeingErnest    schedule 27.01.2018
comment
Ваше здоровье! это сработало, я изменил вторую заливку на ax.fill(theta, df2["data"], hatch='///', alpha=1, edgecolor = 'tomato', fill = False, zorder=2) - person esperluette; 29.01.2018