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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:02