Запланируйте временную шкалу в maplotlib

Я пытаюсь построить двоичную временную шкалу, используя matplotlib (я мог бы рассмотреть альтернативные библиотеки, хотя).

Теперь, по «двоичной шкале времени», я имею в виду «отображение хронологических событий, где пространство событий состоит из двух противоположных событий». Примером такого пространства событий может быть {no_one_in_the_team_is_sick, at_least_one_person_in_the_team_is_sick} .

Представление, которое я хотел бы воспроизвести, – это (я сделал это с помощью d3): введите описание изображения здесь

Я попытался изучить использование штабелированных горизонтальных баров, но это явно не правильный инструмент для работы.

Есть ли более простой и / или более правильный способ достижения этого результата?

Вы можете использовать broken_barh для построения двоичной временной шкалы.

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

 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates #create a time series s with dates as index and 0 and 1 for events dates = pd.date_range("2017-04-01","2017-06-15", freq="D") events = np.random.random_integers(0,1,size=len(dates)) s = pd.Series(events, index=dates) fig, ax= plt.subplots(figsize=(6,2)) # plot green for event==1 s1 = s[s == 1] inxval = matplotlib.dates.date2num(s1.index.to_pydatetime()) times= zip(inxval, np.ones(len(s1))) plt.broken_barh(times, (-1,1), color="green") # plot red for event==0 s2 = s[s == 0] inxval = matplotlib.dates.date2num(s2.index.to_pydatetime()) times= zip(inxval, np.ones(len(s2))) plt.broken_barh(times, (-1,1), color="red") #format axes ax.margins(0) ax.set_yticks([]) ax.xaxis.set_major_locator(matplotlib.dates.MonthLocator()) ax.xaxis.set_minor_locator(matplotlib.dates.DayLocator()) monthFmt = matplotlib.dates.DateFormatter("%b") ax.xaxis.set_major_formatter(monthFmt) plt.tight_layout() plt.show()