在熊猫的时间线上绘制时间段
Posted
技术标签:
【中文标题】在熊猫的时间线上绘制时间段【英文标题】:Plot time periods in timeline from pandas 【发布时间】:2019-05-02 21:54:00 【问题描述】:我不知道这是否可能与 Anaconda 发行版中的 matplotlib 或其他可视化工具有关。
我知道如何使用 javascript 做到这一点,并且可能会走这条路,但我想我会在我的 Jupyter 笔记本中看看是否有办法做到这一点。对于要绘制的每一行数据,我有多个时间段,其中包含开始和结束日期时间。我的目标实际上是找到任何一行中没有时间段的空白。
这里是一个例子:http://visjs.org/examples/timeline/other/groupsPerformance.html
所有行都至少有一个时间段,但有些行有多个时间段。有没有办法在 matplotlib 或 seaborn 中做到这一点?
指向这种可视化的特定文档的指针或示例就足够了。
示例数据框:
id start1 end1 start2 end2
0 Bob 2018-11-29 2018-11-30 2018-12-01 2018-12-31
1 James 2018-10-19 2018-10-31 NaT NaT
2 Jane 2018-04-05 2018-07-12 2018-11-29 2018-11-30
所以 Y 轴将包含 id 字段,而 X 轴将包含时间。在适用的情况下(可能有也可能没有第二个句点),每一行都有(断开的)水平条。
【问题讨论】:
最近我不得不使用 matplotlib 实现一个类似的情节。我使用了barh
,但不幸的是,我不得不自己为情节进行大部分计算。just like this
您能提供示例输入数据吗?
@VivekKalyanarangan 添加了示例数据 - 谢谢
【参考方案1】:
如果您愿意使用plotly
,这可以让您更接近 -
df_full = df[['id','start1','end1']].rename(columns='id':'Task','start1':'Start','end1':'Finish').append(
df[['id','start2','end2']].rename(columns='id':'Task','start2':'Start','end2':'Finish'),sort=False).reset_index()
import plotly.plotly as py
import plotly.figure_factory as ff
fig = ff.create_gantt(df_full)
py.iplot(fig, filename='gantt-simple-gantt-chart', world_readable=True)
编辑
要将任务组合在一起,请使用 -
fig = ff.create_gantt(df_full, group_tasks=True)
py.iplot(fig, filename='gantt-group-tasks-together', world_readable=True)
【讨论】:
这看起来很不错,虽然理想情况下每行只有一行 - 如果可能的话。但还是很好的开始【参考方案2】:broken_barh()
in matplotlib 似乎符合您的需求。我会提供更多细节,但为此我需要一些示例数据。
【讨论】:
我很感激! 如果您知道一种简单的方法,我添加了示例数据仅供参考 - 否则会尝试弄清楚【参考方案3】:您实际上可以在 Jupyter Notebook 中集成基于 javascript 的时间线(具有它提供的所有灵活性)。我写了解释here。
【讨论】:
以上是关于在熊猫的时间线上绘制时间段的主要内容,如果未能解决你的问题,请参考以下文章