Начальные и конечные временные интервалы сюжета - matplotlib python

Я пытаюсь построить временные интервалы. У меня есть две точки начала и конца. Я хочу нарисовать это как куски на фигуре. Имейте в виду, что куски не являются последовательными, и это именно то, что я ищу пробелы. До сих пор я пытаюсь использовать патчи:

for x_1 , x_2 in zip(s_data['begin'].values ,s_data['end'].values):
ax1.add_patch(Rectangle((x_1,0),x_2-x_1,0.5)) 
plt.show()

Но это только дает мне голубую фигуру.

Пока хочу что то подобное

1 ответ

Решение

Подход правильный. Вам просто нужно масштабировать оси так, чтобы весь график находился в пределах его диапазона.

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"begin": [1,4,6,9], "end" : [3,5,8,12]})

fig, ax = plt.subplots()

for x_1 , x_2 in zip(df['begin'].values ,df['end'].values):
    ax.add_patch(plt.Rectangle((x_1,0),x_2-x_1,0.5))

ax.autoscale()
ax.set_ylim(-2,2)
plt.show()

Стоит отметить, что у matplotlib есть функция broken_barh, что упрощает создание таких графиков.

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"begin": [1,4,6,9], "end" : [3,5,8,12]})

fig, ax = plt.subplots()

ax.broken_barh(list(zip(df["begin"].values, (df["end"] - df["begin"]).values)), (0, 0.5))

ax.set_ylim(-2,2)
plt.show()

Давать ту же диаграмму, что и выше.

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