Matplotlib绘制折线图时,整数转日期后x轴与y轴维度不匹配的问题求助
Matplotlib绘制折线图时,整数转日期后x轴与y轴维度不匹配的问题求助
我在处理累积降雨量的绘图需求,数据覆盖了从10月1日到次年3月31日的183天(包含闰年情况)。我想把代表天数的整数转换成对应的日期(从10月1日开始计算),但遇到了两个问题:
- 转换后的日期数量不对:我预期得到183个日期,但实际只输出了182个,漏掉了2月29日
- 绘图时维度不匹配:用转换后的日期变量
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
相关产品推荐
相关产品推荐

