我有一个 Pandas DataFrame,其中包含流量计开始测量流量的日期和该站退役的日期。我想生成一个以图形方式显示这些日期的图。这是我的 DataFrame 的示例:
import pandas as pd
data = {'index': [40623, 40637, 40666, 40697, 40728, 40735, 40742, 40773, 40796, 40819, 40823, 40845, 40867, 40887, 40945, 40964, 40990, 41040, 41091, 41100],
'StationId': ['UTAHDWQ-5932100', 'UTAHDWQ-5932230', 'UTAHDWQ-5932240', 'UTAHDWQ-5932250', 'UTAHDWQ-5932253', 'UTAHDWQ-5932254', 'UTAHDWQ-5932280', 'UTAHDWQ-5932290', 'UTAHDWQ-5932750', 'UTAHDWQ-5983753', 'UTAHDWQ-5983754', 'UTAHDWQ-5983755', 'UTAHDWQ-5983756', 'UTAHDWQ-5983757', 'UTAHDWQ-5983759', 'UTAHDWQ-5983760', 'UTAHDWQ-5983775', 'UTAHDWQ-5989066', 'UTAHDWQ-5996780', 'UTAHDWQ-5996800'],
'amin': ['1994-07-19 13:15:00', '2006-03-16 13:55:00', '1980-10-31 16:00:00', '1981-06-11 17:45:00', '2006-06-28 13:15:00', '2006-06-28 13:55:00', '1981-06-11 15:30:00', '1992-06-10 15:45:00', '2005-10-03 16:30:00', '2006-04-25 09:56:00', '2006-04-25 11:05:00', '2006-04-25 13:50:00', '2006-04-25 14:20:00', '2006-04-25 12:45:00', '2008-04-08 13:03:00', '2008-04-08 13:15:00', '2008-04-15 12:47:00', '2005-10-04 10:15:00', '1995-03-09 13:59:00', '1995-03-09 15:13:00'],
'amax': ['1998-06-30 14:51:00', '2007-01-24 12:55:00', '2007-07-31 11:35:00', '1990-08-01 08:30:00', '2007-01-24 13:35:00', '2007-01-24 14:05:00', '2006-08-22 16:00:00', '1998-06-30 11:33:00', '2005-10-22 15:00:00', '2006-04-25 10:00:00', '2008-04-08 12:16:00', '2008-04-08 09:10:00', '2008-04-08 09:30:00', '2008-04-08 11:27:00', '2008-04-08 13:05:00', '2008-04-08 13:23:00', '2009-04-07 13:15:00', '2005-10-05 11:40:00', '1996-03-14 10:40:00', '1996-03-14 11:05:00']}
df = pd.DataFrame(data)
df.set_index('index', inplace=True)
# display(df.head())
StationId amin amax
index
40623 UTAHDWQ-5932100 1994-07-19 13:15:00 1998-06-30 14:51:00
40637 UTAHDWQ-5932230 2006-03-16 13:55:00 2007-01-24 12:55:00
40666 UTAHDWQ-5932240 1980-10-31 16:00:00 2007-07-31 11:35:00
40697 UTAHDWQ-5932250 1981-06-11 17:45:00 1990-08-01 08:30:00
40728 UTAHDWQ-5932253 2006-06-28 13:15:00 2007-01-24 13:35:00
我想创建一个类似于此的图(请注意,我没有使用上述数据制作此图):
该图不必在每一行都显示文本,只需在 y 轴上显示站点名称。
虽然这看起来像是 pandas 的小众应用,但我知道有几位科学家会从这种绘图能力中受益。
我能找到的最接近的答案在这里:
最后一个答案最符合我的需要。
虽然我更喜欢通过 Pandas 包装器来完成此操作,但我会开放并感谢直接的 matplotlib 解决方案。
原文由 Inkenbrandt 发布,翻译遵循 CC BY-SA 4.0 许可协议
hlines
matplotlib 3.4.2
测试 “` import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as dtusing df from the OP
convert columns to a datetime dtype
df.amin = pd.to_datetime(df.amin) df.amax = pd.to_datetime(df.amax)
fig, ax = plt.subplots(figsize=(8, 5)) ax = ax.xaxis_date() ax = plt.hlines(df.index, dt.date2num(df.amin), dt.date2num(df.amax))
using df from the OP
df.amin = pd.to_datetime(df.amin) df.amax = pd.to_datetime(df.amax)
fig, ax = plt.subplots(figsize=(8, 5)) ax = plt.hlines(df.index, df.amin, df.amax)
”`