【问题标题】:How to force a time series to plot on the whole year, when data is only a few months当数据只有几个月时,如何强制时间序列绘制全年
【发布时间】:2017-12-08 17:35:50
【问题描述】:

我有多个时间序列,每个时间序列都有不同的开始和结束时间。当我使用 pandas 和 matplotlib 绘制它们时,我得到了从 t0 开始到 tx 结束的每个单独系列的漂亮图表。我知道我不能在一个情节中绘制不同长度的系列,但我想至少在几个月内查看它们。

例如,假设我有两个系列:1,从 4 月开始,到 9 月结束,2 从 2 月开始,到 12 月结束。

如何将它们可视化,以便将每个系列绘制在年度图表(1 月至 12 月)上,即使数据不跨越这些日期?我想看到他们一个一个地排着队。

到目前为止,我有这样的情况,使用 xlim=('jan', 'dec'),但我只是得到空白图

for dfl in dfl_list[0:2]:
       dfl.plot(x='DateTime', y=['VWCmax', 'VWCmin'],
            ax=p1, fontsize=15, xlim=('Jan', 'Dec'))
       p1.set_title('Time vs VWC', fontsize=15)
       p1.set_ylabel('VWC (%)  ' + '{}'.format(imei), fontsize=15)
       p1.set_xlabel('Time Stamp', fontsize=15) 

我也尝试过 xticks 而不是 xlim,但我也得到了空白图。

【问题讨论】:

  • 可能看起来很笨拙-但如果所有其他方法都失败了,那么添加具有该日期的空白记录是一个可行的选择吗?在伪代码if min(month(date)) != 'January' then Create_Blank_Record() 中做这样的事情
  • 哼,也许,如果没有更好的解决方案,它值得一试。感谢您的建议。
  • 不清楚是什么问题。默认情况下,轴将扩展以显示所有数据,因此在一个图中绘制两条不同的曲线将完全显示两条曲线。因此,您要求的是默认行为。如果您在到达那里时遇到问题,您需要提供问题的minimal reproducible example,即可以复制、粘贴和运行代码以查看不需要的结果并帮助您纠正它。

标签: pandas matplotlib time-series


【解决方案1】:

我遇到的问题是我认为 xlim 的参数可能是字符串“Jan”和“Dec”,这最终返回空白图,因为 pyplot 不知道如何在字符串上拟合图类型。解决方案是 xlim 必须传递日期时间参数:

for dfl in dfl_list[0:2]:
    dfl.plot(x='DateTime', y=['VWCmax', 'VWCmin'],
       ax=p1, fontsize=15, xlim=(datetime(2017,1,1), datetime(2017,12,31))
    p1.set_title('Time vs VWC', fontsize=15)
    p1.set_ylabel('VWC (%)  ' + '{}'.format(imei), fontsize=15)
    p1.set_xlabel('Time Stamp', fontsize=15) 

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2021-08-31
    • 2014-08-28
    • 2021-03-14
    • 2014-09-23
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多