首页 > 解决方案 > 如何将日期绘制到 matplotlib

问题描述

嗨,我正在尝试将 x 轴更改为月轴,但似乎无法做到。
我找不到插入日期时间轴的方法,当我这样做时会遇到错误。

这是我的日期时间变量,基本上很简单,只想创建一个从 2020 年开始为期 1 年的每周计数器:

date = pd.date_range(start='2020-01-01', periods=52, freq='w')

这是我的情节代码:

cumm19=fcst2019.cumsum()
cumm20=fcst2020.cumsum()
cumm20w=fcst2020w.cumsum()

plt.axhline(y=cumm19['no._of_cases'][51], color='r', label= '2019 numbers (15,910)')
plt.plot(cumm20[:21], label ='2020 current')
plt.plot(cumm20[20:], label ='2020 predictions')
plt.plot(cumm20w[20:], label ='2020 worse case predictions')
plt.xlabel('Months')
plt.ylabel('Cumulative no. of cases')
plt.legend()
plt.show()   

我如何将它们结合起来?

我目前的结果

标签: pythonmatplotlib

解决方案


如果您将 datetime 变量设置为数据框的索引,则 x 轴刻度会自动获取具有适当格式的日期标签:

import numpy as np                 # v 1.19.2
import pandas as pd                # v 1.2.3
import matplotlib.pyplot as plt    # v 3.3.4
import matplotlib.dates as mdates

# Create sample datasets
date = pd.date_range(start='2020-01-01', periods=52, freq='w')
fcst2020 = pd.DataFrame(dict(fcst=np.repeat([500, 750], [21, 31])), index=date)
fcst2020w = pd.DataFrame(dict(fcst=np.repeat([500, 600], [21, 31])), index=date)

cumm20 = fcst2020.cumsum()
cumm20w = fcst2020w.cumsum()

# Plot data
plt.plot(cumm20[:21], label ='2020 current')
plt.plot(cumm20[20:], label ='2020 predictions')
plt.plot(cumm20w[20:], label ='2020 worse case predictions')
plt.axhline(y=15910, color='r', label= '2019 numbers (15,910)', zorder=0)
plt.xlabel('Months')
plt.ylabel('Cumulative no. of cases')
plt.legend()

plt.show()

xaxis_dates


您可以使用matplotlib 日期 DateFormatter自定义刻度标签的格式:

# Edit x-axis tick labels
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m'))

plt.show()

xaxis_dates_formatted


推荐阅读