【问题标题】:Plot a multiple line chart based on date ranges (min and max)根据日期范围(最小值和最大值)绘制多折线图
【发布时间】:2020-05-10 18:53:02
【问题描述】:

我有一个像下面这样的 df:

   DATE_MIN DATE_MAX
214 1994-06-29  2010-07-12
125 1969-10-26  2011-10-10
123 2013-07-02  2015-01-29
74  2006-01-05  2016-06-20

列是:DATE_MIN、DATE_MAX

我想绘制一个长的垂直图表,其中包含尽可能多的水平 行作为 df 行。

  • x 轴为日期范围
  • 在 y 轴上有索引, 因此每条线都是水平的,它们不会相互交叉。

所以我想显示哪些行有一些时间重叠,因为这些行会有重叠区域(不交叉)。

提前非常感谢!

【问题讨论】:

标签: python pandas dataframe matplotlib charts


【解决方案1】:

到目前为止,感谢您提供的超快速答案。 我实际上为我找到了一个很好的解决方案here

因此我的代码如下所示:

import matplotlib.pyplot as plt
import matplotlib.dates as dt

df = df.sort_values(by=['DATE_MIN', 'DATE_MAX'])
fig = plt.figure(figsize=(10, 50))
ax = fig.add_subplot(111)
ax = ax.xaxis_date()
ax = plt.hlines(df.ID, 
                dt.date2num(df.DATE_MIN), 
                dt.date2num(df.DATE_MAX))

【讨论】:

  • 在这种情况下,您应该将您的问题标记为重复。
【解决方案2】:

如果您乐于制作甘特图并巧妙地使用,您可以使用doc

import pandas as pd
from io import StringIO
import plotly.figure_factory as ff

txt="""TASK  DATE_MIN DATE_MAX
214 1994-06-29  2010-07-12
125 1969-10-26  2011-10-10
123 2013-07-02  2015-01-29
74  2006-01-05  2016-06-20
"""

df = pd.read_csv(StringIO(txt), delim_whitespace=True)

data = []
for i,row in df.iterrows():
    data.append(dict(Task=str(row["TASK"]),
                     Start=str(row["DATE_MIN"]),
                     Finish=str(row["DATE_MAX"])))

fig = ff.create_gantt(data)
fig.show()

【讨论】:

  • 谢谢,我想在没有更多外部库的情况下这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多