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

ValueError:x与y第一维度不一致,DataFrame列表字段matplotlib绘图报错如何解决

报错根因

你遇到的ValueError: x and y must have same first dimension, but have shapes (6,) and (3,)报错,核心和数据类型无关,本质是每行timestep列的列表长度与对应行scores列的列表长度不匹配。
从你给出的样例数据可以看到:前4个样本的scores只有3个元素,第5个样本的scores有4个元素,但所有样本的timestep都有6个元素。折线图要求x、y轴的数值点数量完全一致,因此即使将列表转为numpy数组也无法解决问题。
同时你使用的plt.plot('timestep', 'scores', data=test.iloc[p])写法本身不适用于列存储列表的场景,该语法仅支持data参数为普通DataFrame、传入列名对应一维标量的情况。

可行解决方案

根据你的实际需求选择对应方案即可:

方案1:对齐x/y序列长度后绘图

如果业务逻辑允许取两个序列的交集部分绘图,可以直接截取相同长度的元素后再绘制:

import matplotlib.pyplot as plt

c = ['blue', 'olive', 'yellow', 'red', 'purple']
for p in range(len(test)):
    ts = test.iloc[p]['timestep']
    sc = test.iloc[p]['scores']
    # 取两个序列的最小长度做对齐
    min_len = min(len(ts), len(sc))
    # 绘图并指定对应图例
    plt.plot(ts[:min_len], sc[:min_len], color=c[p], linewidth=2, label=f'pop member {p}')

plt.legend()
plt.xlabel('Timesteps')
plt.ylabel('Scores')
plt.show()

方案2:修复上游数据生成逻辑

如果业务要求scores和timestep必须一一对应,说明你在生成这两列数据的环节就存在逻辑错误,比如timestep多记录了点位、scores少统计了点位,排查修复上游代码保证同一样本的两个列表长度一致后,就可以正常绘图。

内容的提问来源于stack exchange,提问作者K2G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:51:03