【问题标题】:ploting histogram with timedelta series用 timedelta 系列绘制直方图
【发布时间】:2021-09-03 13:36:36
【问题描述】:

我有一些数据系列,这是一个 timedelta 数据类型。我想将这些时间增量绘制成条形图,其中 y 轴应仅以小时为单位而不是其他格式。以前,当我在 matplotlib 中尝试使用折线图时,它显示了一些无法理解的数字。以下是我的 timedelta 系列 pandas 的示例:

date
2020-04-11   0 days 02:00:00
2020-04-12   0 days 03:00:00
2020-04-13   0 days 02:00:00
2020-04-14   0 days 03:00:00
2020-04-15   0 days 01:00:00
2020-04-16   0 days 03:00:00
Freq: D, dtype: timedelta64[ns]

当我试图在 matplotlib 中绘制它时,它会导致一个带有 y 轴值的图对我来说看起来很奇怪。

请帮助我处理绘图,其中 y 轴刻度标签应采用 01:0002:00 等格式。

急切地等待一些帮助。

【问题讨论】:

    标签: python pandas datetime matplotlib timedelta


    【解决方案1】:

    一种可能的方法是以秒为单位转换增量并定义FuncFormatter。 这是我的测试系列和我的最终情节:

    2020-04-11   02:00:00
    2020-04-12   03:00:00
    2020-04-13   05:00:00
    dtype: timedelta64[ns]
    
    def delta(x, pos):
        out = str(datetime.timedelta(seconds=x)  )
        return out
                
    fig = plt.figure()
    ax = fig.gca()
    form = matplotlib.ticker.FuncFormatter(delta)
    ax.yaxis.set_major_formatter(form)
    ax.plot(s.index, s/np.timedelta64(1,'s'))
    ax.set_yticks(s/np.timedelta64(1,'s'))
    ax.set_xticks(s.index)
    plt.show()
    

    【讨论】:

    • 非常感谢 Luigi,它确实是一个很好的信息。我可以看到您所做的事情很棒,但是旅游数据是 pandas 数据框类型的。但是,我将数据作为 timedelta 系列,这不允许我将日期索引与 timedelta 值分开。因此,请为系列数据而不是数据框提供任何解决方案。
    • @sambehera 假设您的系列名为s,您可以将df['date'] 替换为s.index 并将df['delta'] 替换为s
    • 感谢@tdy 的更正。我用 pd.Series 编辑了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2020-03-02
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多