熊猫 - 时间线的堆积水平条形图?

时间:2014-12-12 22:21:37

标签: python pandas charts visualization

我正在考虑创建时间轴来显示某些项目的状态更改。

timeline

对于每个项目,我都有一个事件列表 - 例如:

  • 08:00 - 项目A现在处于RED状态
  • 08:00 - 项目B现在处于GREEN状态
  • 08:55 - 项目B现在处于PURPLE状态
  • 09:00 - 项目A现在处于状态BLUE
  • 09:22 - 项目A现在处于黄色状态
  • 10:20 - 项目B现在处于RED状态 等

我正在使用pandas,并考虑使用堆叠的水平条形图(http://pandas.pydata.org/pandas-docs/stable/visualization.html#bar-plots):

pandas stacked horizontal barchart

但是,这种情况下的条形图由以下数据框支持:

In [17]: df2 Out[17]: a b c d 0 0.865681 0.276997 0.691200 0.077541 1 0.863821 0.465361 0.076636 0.013124 2 0.266339 0.359055 0.237709 0.698812 3 0.880864 0.198044 0.807911 0.889326 4 0.253440 0.080855 0.206936 0.603920 5 0.121422 0.880760 0.492782 0.841651 6 0.151359 0.264984 0.249734 0.136582 7 0.222347 0.007675 0.978766 0.267517 8 0.102839 0.847454 0.775913 0.519219 9 0.118314 0.347371 0.314426 0.308254

我不确定大熊猫最有效的方式是将我的事件时间线映射到某个东西并绘制它。我想我可以将时间戳转换为持续时间(例如秒数),但我更喜欢x轴显示上面第一个例子的时间戳,所以这可能不起作用。

这样做有好处吗?

1 个答案:

答案 0 :(得分:2)

fig, ax = plt.subplots()
df.plot(kind='barh', stacked=True, ax=ax)
ax.set_yticklabels(['A', 'B', 'C', 'D', 'E', 'F'])
time = pd.date_range(start=pd.to_datetime('07:00', format='%H:%M'), end=pd.to_datetime('13:00', format='%H:%M'),freq='H')
time_x = [dt.strftime('%H:%M') for dt in time]
ax.set_xticklabels(time_x)
fig.autofmt_xdate()
plt.show()

enter image description here