条形图与timedelta作为条宽度[英] Bar plot with timedelta as bar width

本文是小编为大家收集整理的关于条形图与timedelta作为条宽度的处理方法,想解了条形图与timedelta作为条宽度的问题怎么解决?条形图与timedelta作为条宽度问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个带有时间戳(start)的列的熊猫数据框,另一列包含timedeltas(duration)表示持续时间.

我正在尝试绘制条形图,显示这些持续时间在时间​​戳处的左边缘.无论如何我都没有在网上找到这样做.有什么方法可以实现这一目标吗?

到目前为止,这就是我所拥有的,它不起作用:

    height = np.ones(df.shape[0])
    width = [x for x in df['duration']]
    plt.bar(left=df['start'], height=height, width=width)

编辑: 我已更新宽度如下,但这也不能解决此问题:

width = [x.total_seconds()/(60*1200) for x in df['duration']]

我有兴趣知道datetime.timedelta对象是否可以在width中使用,因为datetime对象可以用作x轴.如果没有,有什么选择?

编辑#2:

这可能不是我问题的确切答案,但它解决了我的目的.对于有兴趣的人,这是我最终采用的方法(我使用start和duration为此目的制作end):

    for i in range(df.shape[0]):
        plt.axvspan(df.ix[i, 'start'], df.ix[i, 'end'], facecolor='g', alpha=0.3)
        plt.axvline(x=df.ix[i, 'start'], ymin=0.0, ymax=1.0, color='r', linewidth=1)
        plt.axvline(x=df.ix[i, 'end'], ymin=0.0, ymax=1.0, color='r', linewidth=1)

推荐答案

如果您的df.duration[0]类型为pandas.tslib.Timedelta,并且您的timestamps与众不同,则可以使用:

width = [x.days for x in df.duration]

这将产生图表.

否则使用total_seconds

本文地址:https://www.itbaoku.cn/post/1727977.html