【问题标题】:Plot timedelta in matplotlib在 matplotlib 中绘制 timedelta
【发布时间】:2018-04-16 02:40:09
【问题描述】:

我正在阅读某年的时间(持续时间)数据,我想在 x 轴上绘制年份图表,在 y 轴上绘制时间(持续时间)图表。我希望 y 轴具有 HH:MM:SS 格式。我不知道该怎么做。这是我的代码(数据是合成的,实际数据集要大得多)。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, date2num

df = pd.DataFrame({'Year':[2010, 2011, 2012], 
                   'Time': ['2:19:15', '2:11:16', '2:20:17']})
df['Time'] = pd.to_timedelta(df['Time'])

fig, ax = plt.subplots()

myFmt = DateFormatter("%H:%M:%S")
ax.yaxis.set_major_formatter(myFmt)

ax.plot(df['Year'], df['Time'].dt.total_seconds())

plt.gcf().autofmt_xdate()

plt.show()

如果我不转换为 total_seconds,则会收到错误消息。似乎总秒值被解释为天。我尝试将 total_seconds 除以 24*60*60,但这给了我一条关于 0 日期的消息。我也无法说服 date2num 为我工作。

我检查过以前的类似问题,但代码不再有效。

有人知道如何在 matplotlib 中绘制 Pandas 时间增量吗?

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    使用pd.to_datetime 将timedetlas 转换为datetime。它会给所有东西一个 1970 年的日期,但如果你想要的只是绘制和显示,那么它就无关紧要了。然后你也需要摆脱.dt.total_seconds()

    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.dates import DateFormatter, date2num
    
    df = pd.DataFrame({'Year':[2010, 2011, 2012], 
                       'Time': ['2:19:15', '2:11:16', '2:20:17']})
    df['Time'] = pd.to_timedelta(df['Time'])
    df['Time'] = pd.to_datetime(df['Time'])
    fig, ax = plt.subplots()
    
    myFmt = DateFormatter("%H:%M:%S")
    ax.yaxis.set_major_formatter(myFmt)
    
    ax.plot(df['Year'], df['Time'])
    
    plt.gcf().autofmt_xdate()
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多