【问题标题】:Export time series plot导出时间序列图
【发布时间】:2020-04-04 18:18:23
【问题描述】:

我正在运行以下代码以在 Python 中导出 .png 文件:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('ticks')

plt.figure(figsize=(30,15))
ax = ts['Item'].plot(lw = 10)
ax.set_xlim(pd.Timestamp('2019-09-01'), pd.Timestamp('2019-12-12'))
plt.xticks (rotation=45)
plt.title('Time Series of submitted items',fontsize = 30)
plt.tight_layout()
plt.savefig('TimeSeries.png',format="png")

导出的 .png 文件是空的。

ts dataframe 包含三列并按日期分组。 拨打head我得到以下信息:

Submit date time    Item        Status
2019-01-09          2           2
2019-01-10          224         224
2019-01-11          196         196
2019-01-12          337         337
2019-02-09          9           9

我已经把plt.show()放在plt.savefig()后面,但还是遇到这个问题。除此之外,我想知道用pd.Timestamp 明确定义日期范围是否明智,或者我是否应该格式化提交日期时间列。

【问题讨论】:

    标签: python pandas matplotlib time-series seaborn


    【解决方案1】:

    您确定您的日期范围内有数据吗? (您提供的示例中不是这种情况)。您可能有混合日期格式。

    否则,以下 sn-p 应该可以工作:

    ax = df.plot(x='Submit date time', y='Item', lw=10, figsize=(30, 15))
    ax.set_xlim('2019-01-01', '2019-12-12')
    plt.xticks(rotation=45)
    plt.title('Time Series of submitted items', fontsize=30)
    plt.tight_layout()
    plt.show()
    

    请注意,您不必专门格式化/转换 set_xlim 中的日期。

    【讨论】:

    • 感谢sn-p!问题是提交日期列的格式错误,因为它是yyyy-dd-mm', but it should be yyyy-mm-dd'。我已使用dataset['Submit date date'].dt.strftime('%Y-%m-%d') 对其进行了更改,但不幸的是,分组仍然显示如上的提交日期:/
    【解决方案2】:

    下面的代码为我正确绘制。我认为问题在于 plot 命令没有为 plot 函数提供足够的信息。参见[数据框绘图][1]。此外,您原始代码的 xlim 命令是在 9 月和 1 月开始的。

    plt.figure(1)
    #format the data types
    ts['Date'] = pd.to_datetime(ts['Date'])
    
    ax = ts.plot(x = 'Date', y = 'Item')
    ax.set_xlim(pd.Timestamp('2019-01-01'), pd.Timestamp('2019-12-12'))
    plt.xticks (rotation=45)
    plt.title('Time Series of submitted items',fontsize = 30)
    plt.tight_layout()
    plt.savefig('~/python_files/TimeSeries.png')```
    
    
      [1]: https://datatofish.com/plot-dataframe-pandas/
    

    【讨论】:

    • 嗨@DeathbyGreen,谢谢你的sn-p。我发现了我的错误。我没有正确指定格式,将原始日期字符串格式化为时间戳。我已将其更正为dataset['Submit date time'] = pd.to_datetime(dataset['Submit date time'],format='%d-%m-%Y')。现在我收到了情节,也可以保存它。
    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2015-05-05
    • 2011-11-05
    • 2017-10-16
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多