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

Matplotlib绘制stackplot时ufunc 'isfinite'不支持输入类型报错如何解决?

报错根因
  • 长度不匹配:stackplot要求所有Y轴序列的长度必须和X轴rewards的长度完全相等。你当前的报错提示存在长度不一致的嵌套序列,说明means字典里至少有一个电影对应的array长度和rewards的长度(230)不符,导致numpy无法生成数值类型的数组,只能生成object类型数组,后续np.isfinite校验数值有效性时触发类型错误。
  • 参数传递错误:stackplot的Y轴参数需要接收多个独立的一维序列,直接传入means.values()会被识别为单个视图对象,不符合参数要求。
  • 次要问题:ax.legend(loc='')传入了空字符串作为位置参数,属于不合法取值,后续即使解决了数据问题也会触发图例相关报错。
修复步骤
  1. 先校验并修正数据长度
    运行以下代码排查长度不匹配的条目:
rewards_len = len(rewards)
for movie, y_arr in means.items():
    if len(y_arr) != rewards_len:
        print(f"异常条目:{movie},序列长度:{len(y_arr)},预期长度:{rewards_len}")

根据排查结果处理异常数据:可选择截断超长序列、补全短序列、或直接删除异常条目,保证所有Y序列长度和rewards一致。

  1. 修改绘图代码
    调整参数传递方式,修正图例位置参数:
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
# 用*解包means.values(),将所有Y序列逐个传入函数
ax.stackplot(rewards, *means.values(), labels=means.keys())
# 传入合法的图例位置参数,或删除loc参数使用默认位置
ax.legend(loc='upper left')
ax.set_title('堆叠面积图')
ax.set_xlabel('X轴标签')
ax.set_ylabel('Y轴标签')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:09:00