首页 > 解决方案 > 绘制时间线突出显示 DataFrame 中存在的特定值

问题描述

我有以下内容df

df1 : 
index      Event1 Event2 Event3 Event4 Event5 Event6
2000-01-01    1     1      1      1      1       1
2000-01-02   nan   nan    nan    nan    nan     nan 
2000-01-03   nan   nan    nan    nan    nan     nan 
2000-01-04   nan   nan    nan    nan    nan     nan 
2000-01-05   nan   nan    nan    nan    nan     nan 
                            (...)
2000-02-03    1    nan      1    nan     1       1
2000-02-04   nan   nan    nan    nan    nan     nan 
2000-02-05   nan   nan    nan    nan    nan     nan 
2000-02-06   nan   nan    nan    nan    nan     nan 
2000-02-07   nan   nan    nan    nan    nan     nan 
                            (...)
2020-08-03   nan   nan    nan    nan    nan     nan
2020-08-05   nan   nan    nan    nan    nan     nan 
2020-08-07   nan   nan    nan    nan    nan     nan 
2020-08-10   nan    1     nan     1     nan     nan 
2020-08-13   nan   nan    nan    nan    nan     nan 

df表示某个事件是否在指定的日期发生。

如果1的第一列中 有1df作为值,则 event1 发生在该日期,依此类推。

我需要的是绘制这个,就像一个时间线,显示事件发生的时间。我尝试构建一个散点图,显示值,但它真的很糟糕。像这样的东西会很好: 在此处输入图像描述如果你们能指出我的任何方向......

我在以下链接中查找,但找不到这样做的方法:

  1. 具有多个系列的 Seaborn 时间序列图

  2. https://bbengfort.github.io/snippets/2016/01/29/timeline-visualization.html

  3. https://python-graph-gallery.com/seaborn/

观察:

  1. DataFrame 本身很大,包含 20 年的 Data。我相信我将无法以合适的分辨率绘制单个图像,但我可以将 DataFrame 分解为较小的图像,然后单独绘制。
  2. 我不需要每个日期都在我的 y 轴上,但差距也不能太宽。
  3. 在每一列中,一个事件与另一个事件之间至少有一个月的间隔。
  4. 不一定,事件发生在月初。
  5. 这些事件发生在同一日期,但有些可能没有发生。

标签: pythonpandasmatplotlibseaborn

解决方案


您是否尝试使用带有情节的时间线情节或带有 seaborn 的条状情节?

https://plotly.com/python/gantt/

https://seaborn.pydata.org/generated/seaborn.stripplot.html?highlight=stripplot#seaborn.stripplot

在绘制 df 之前,您可能需要对其进行一些预处理操作。


推荐阅读