在熊猫的时间线上绘制时间段

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。

【讨论】:

以上是关于在熊猫的时间线上绘制时间段的主要内容,如果未能解决你的问题,请参考以下文章

绘制熊猫时间增量

熊猫可以在不尝试将索引转换为周期的情况下绘制时间序列吗?

将索引转换为日期时间对象后,MatplotLib 无法正确绘制熊猫时间序列 1 分钟数据

如何仅绘制熊猫 datetime64[ns] 属性的时间

根据月份绘制熊猫数据框

绘制熊猫时间序列数据框的线性回归线的置信区间