PyCharm中Matplotlib绘图报错:x与y维度不匹配问题求助
问题分析与解决
错误原因
报错ValueError: x and y must have same first dimension, but have shapes (365,) and (364,)的核心问题:
- 2022年是平年,生成的日期列表
date包含365个元素 - 从
sr_ss_clean.csv读取的sunrise/sunset数据只有364条,两者长度不匹配,导致matplotlib无法完成绘图
排查与解决方案
第一步:验证数据行数
在读取CSV后添加打印语句,确认数据长度差异:
import csv import datetime import matplotlib.pyplot as plt with open('sr_ss_clean.csv') as temp_file: sunrise = [] sunset = [] reader = csv.reader(temp_file) next(reader) # 跳过表头行 for row in reader: sunrise.append(float(row[1])) sunset.append(float(row[2])) # 打印长度确认差异 print(f"日出数据行数: {len(sunrise)}") print(f"日期数据行数: {len(date)}") start_date = datetime.date(2022, 1, 1) end_date = datetime.date(2022, 12, 31) delta = datetime.timedelta(days=1) date = [] while start_date <= end_date: date.append(start_date) start_date += delta
方案1:补全CSV数据(推荐)
打开sr_ss_clean.csv文件,检查是否缺失某一天的日出/日落数据,补全对应行即可。这是最稳妥的方式,能保证绘图数据的完整性和准确性。
方案2:调整日期列表适配现有数据(临时方案)
如果暂时无法补全CSV,可修改日期列表,去掉多余的一天,让两者长度一致:
# 生成日期列表后,移除最后一天(2022-12-31) date = date[:-1] # 若缺失的是第一天数据,改为移除第一个元素:date = date[1:]
修改后的完整代码示例(补全CSV后)
import csv import datetime import matplotlib.pyplot as plt with open('sr_ss_clean.csv') as temp_file: sunrise = [] sunset = [] reader = csv.reader(temp_file) next(reader) for row in reader: sunrise.append(float(row[1])) sunset.append(float(row[2])) start_date = datetime.date(2022, 1, 1) end_date = datetime.date(2022, 12, 31) delta = datetime.timedelta(days=1) date = [] while start_date <= end_date: date.append(start_date) start_date += delta # 提前校验长度,避免再次报错 assert len(date) == len(sunrise), "日期与日出数据长度不匹配" assert len(date) == len(sunset), "日期与日落数据长度不匹配" figure = plt.figure() left_axis = figure.add_subplot(1, 1, 1) right_axis = left_axis.twinx() left_axis.plot(date, sunrise, label="日出") left_axis.plot(date, sunset, label="日落") left_axis.set_xlabel('日期') left_axis.set_ylabel('时间') left_axis.legend(loc='upper left') right_axis.set_ylabel('时间') plt.show()
内容的提问来源于stack exchange,提问作者banana_milk
相关产品推荐
相关产品推荐

