Как вывести из строя broken_barh на pyth on matplotlib?

Я хотел бы использовать штриховку в broken_barh в matplotlib. То, что я хочу, это чтобы разные цвета на графике имели разные штриховки. Я пытался добавить в качестве словаря, но не удалось, кто-нибудь знает, как это правильно? это пример кода с веб-сайта matplotlib.

"" "Сделать" разбитую "горизонтальную линейную диаграмму, т. Е. Одну с пропусками" ""

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.broken_barh([(110, 30), (150, 10)], (10, 9), facecolors='blue', hatch='o')
ax.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9),
               facecolors=('red', 'yellow', 'green'), hatch='//')
ax.set_ylim(5, 35)
ax.set_xlim(0, 200)
ax.set_xlabel('seconds since start')
ax.set_yticks([15, 25])
ax.set_yticklabels(['Bill', 'Jim'])
ax.grid(True)
ax.annotate('race interrupted', (61, 25),
            xytext=(0.8, 0.9), textcoords='axes fraction',
            arrowprops=dict(facecolor='black', shrink=0.05),
            fontsize=16,
            horizontalalignment='right', verticalalignment='top')

plt.show()

Я хочу иметь разные штриховки для разных цветов, но это невозможно:
Я хочу иметь разные штриховки для разных цветов, но это невозможно

Буду признателен, если кто-нибудь подскажет, как это сделать?

1 ответ

Решение

broken_barh не позволяет устанавливать разные люки. Но поскольку разбитая полоса - это всего лишь несколько одиночных полос, вы можете построить отдельные полосы с разными штрихами.

import matplotlib.pyplot as plt

def brokenhatchbar(xs, y, ax=None, **kw):
    if not ax: ax=plt.gca()
    hatches = kw.pop("hatch", [None]*len(xs))
    facecolors = kw.pop("facecolors", [None]*len(xs))
    edgecolors = kw.pop("edgecolors", [None]*len(xs))
    for i, x in enumerate(xs):
        ax.barh(bottom=y[0], width=x[1], height=y[1], left=x[0],
                facecolor=facecolors[i], edgecolor=edgecolors[i], hatch=hatches[i])

fig, ax = plt.subplots()
brokenhatchbar([(110, 30), (150, 10)], (10, 9), facecolors=['blue','blue'], hatch=['o','////'])
brokenhatchbar([(10, 50), (100, 20), (130, 10)], (20, 9),
               facecolors=('red', 'yellow', 'green'), hatch=('//', 'o', '+'))
ax.set_ylim(5, 35)
ax.set_xlim(0, 200)
ax.set_xlabel('seconds since start')

ax.grid(True)

plt.show()

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

Другие вопросы по тегам