繁体   English   中英

如何修复我的 Python Plot 上的日期时间 x 轴?

[英]How do I fix the datetime x-axis on my Python Plot?

我正在尝试 plot 时间 x 降水图,但是,x 轴上的值与 y 轴上的值不匹配。 plot 本身是正确的,但 x 轴不是。 上下文是我创建了一个 Prophet model 来预测月降水量,在生成值之后,我根据预测绘制了测试图,虽然线条看起来是正确的,但日期看起来向左移动了一个“单位”:

降水量 x 月:

图片

测试值:

    Date    Precipitation
443 2020-12-31  273.2
444 2021-01-31  215.5
445 2021-02-28  180.6
446 2021-03-31  138.4
447 2021-04-30  54.4
448 2021-05-31  44.4
449 2021-06-30  16.2
450 2021-07-31  39.4
451 2021-08-31  44.4
452 2021-09-30  39.5
453 2021-10-31  91.9
454 2021-11-30  98.6
455 2021-12-31  127.3
456 2022-01-31  308.5

预测值:

    Date    Precipitation
443 2020-12-31  133.7
444 2021-01-31  272.0
445 2021-02-28  222.0
446 2021-03-31  177.3
447 2021-04-30  75.9
448 2021-05-31  81.5
449 2021-06-30  31.9
450 2021-07-31  41.7
451 2021-08-31  28.9
452 2021-09-30  42.9
453 2021-10-31  111.4
454 2021-11-30  129.5
455 2021-12-31  126.2
456 2022-01-31  299.1

我们可以观察到第一个值应该是 2020-12,但事实并非如此。

fig = plt.figure(figsize=(12, 8))

plt.plot(test.Date, test.Precipitation, 's-r')
plt.plot(previsao.Date, previsao.Precipitation, 's-b')

plt.title('Precipitação por Mês na Cidade de São Paulo em $mm$', fontsize=20)

plt.ylabel('Precipitação ($mm$)', fontsize=12)
plt.xlabel('Ano')
plt.legend(['Real', 'Previsão']);
plt.show() 

谁能指出我在这里做错了什么? 我相信我在绘制图表时做错了什么,但我无法弄清楚。

您需要做几件事。 首先确保日期列是日期时间格式。 您可以使用test.info()previsao.info()进行检查,并查看数据类型是否为日期时间。 如果没有,请使用pd.to_datetime() 显示日期的默认格式是该月的第一天。 因此,您看到的日期看起来像是偏移了一个月。 但是,由于您的日期是该月的最后一天,因此您需要使用 MonthLocator 中的MonthLocator bymonthday=-1更改显示以显示最后日期。 最后,我使用“YYYY-MM-DD”格式进行显示,以便您可以看到完整的日期并旋转刻度标签。 您可以对其进行编辑以满足您的需要。 更新后的代码如下所示。 希望这就是您要找的。

fig = plt.figure(figsize=(12, 8))

## Use these if your dates are NOT already in datetime format
test['Date']=pd.to_datetime(test['Date'])
previsao['Date']=pd.to_datetime(previsao['Date'])

plt.plot(test.Date, test.Precipitation, 's-r')
plt.plot(previsao.Date, previsao.Precipitation, 's-b')

plt.title('Precipitação por Mês na Cidade de São Paulo em $mm$', fontsize=20)

plt.ylabel('Precipitação ($mm$)', fontsize=12)
plt.xlabel('Ano')
plt.legend(['Real', 'Previsão']);

## Added code here
import matplotlib.dates as mdates ## Import required library
months = mdates.MonthLocator(interval=1, bymonthday=-1)  ## 1 month apart & show last date
plt.gca().xaxis.set_major_locator(months) ## Set months as major locator
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) ##Display format - update here to change
plt.xticks(rotation=45, ha='right') ##Adjust angle and horizontal align right
plt.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM