在 matplotlib 中绘制二进制时间线
Plot a binary timeline in matplotlib
我正在尝试使用 matplotlib 绘制二进制时间线(不过我也许可以考虑其他库)。
现在,"binary timeline" 我指的是 "display of chronological events, where the event space is made of two opposite events"。
此类事件 space 的示例可以是 {no_one_in_the_team_is_sick, at_least_one_person_in_the_team_is_sick}
.
我想复制的表示是这样的(我用 d3 做到了):
我尝试探索堆叠水平条的使用,但它显然不是这项工作的正确工具。
是否有更简单 and/or 更正确的方法来实现该结果?
您可以使用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()
这可能对您有用:
Rich Matplotlib timeline visualization
它显示的信息比您可能需要的要丰富得多。
我正在尝试使用 matplotlib 绘制二进制时间线(不过我也许可以考虑其他库)。
现在,"binary timeline" 我指的是 "display of chronological events, where the event space is made of two opposite events"。
此类事件 space 的示例可以是 {no_one_in_the_team_is_sick, at_least_one_person_in_the_team_is_sick}
.
我想复制的表示是这样的(我用 d3 做到了):
我尝试探索堆叠水平条的使用,但它显然不是这项工作的正确工具。
是否有更简单 and/or 更正确的方法来实现该结果?
您可以使用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()
这可能对您有用:
Rich Matplotlib timeline visualization
它显示的信息比您可能需要的要丰富得多。