You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib绘制折线图时,整数转日期后x轴与y轴维度不匹配的问题求助

Matplotlib绘制折线图时,整数转日期后x轴与y轴维度不匹配的问题求助

我在处理累积降雨量的绘图需求,数据覆盖了从10月1日到次年3月31日的183天(包含闰年情况)。我想把代表天数的整数转换成对应的日期(从10月1日开始计算),但遇到了两个问题:

  1. 转换后的日期数量不对:我预期得到183个日期,但实际只输出了182个,漏掉了2月29日
  2. 绘图时维度不匹配:用转换后的日期变量days绘图会报错,但直接用DataFrame里的Date列绘图就完全正常

报错信息

ValueError: x and y must have same first dimension, but have shapes (1,) and (183,)

我的尝试与问题点

我用下面的代码把整数天数转换成日期:

days = {}
for i in range(0, max(df['Date'])):
    days[i] = (datetime.datetime(2000, 10, 1) + datetime.timedelta(days=i)).strftime("%d %b")

打印days时发现只生成了182个日期,缺了2月29日。

绘图时,用这段代码会报错:

plt.plot(days, df['Mean'], color='b', label='Mean') # days是转成日期的整数对应的日期字典

但换成直接用DataFrame的Date列就完全正常:

plt.plot(df['Date'], df['Mean'], color='b', label='Mean') # 正常运行

完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime

df = pd.read_csv('../RnOut/RAINFALL/Cumul/CHIPAT.txt')
fig, ax = plt.subplots(figsize=(10, 10))
x = np.array([min(df['Date']), max(df['Date'])])
y = np.array([min(df['Mean']), max(df['Mean'])])

# 转换天数为日期
days = {}
for i in range(0, max(df['Date'])):
    days[i] = (datetime.datetime(2000, 10, 1) + datetime.timedelta(days=i)).strftime("%d %b")

ax.set_title('Cumulative Rainfall: Oct-Mar\n *****************************')
plt.xticks(np.arange(0, max(df['Date']),step=10))
plt.xlabel("Days From 01 Oct")
plt.ylabel("Cumulative Rainfall (mm)")

plt.plot(days, df['Mean'], color='b', label='Mean')
plt.show()

请问我该怎么正确使用自己生成的日期来绘图呢?


备注:内容来源于stack exchange,提问作者Zilore Mumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:18:09