Matplotlib绘制stackplot时ufunc 'isfinite'不支持输入类型报错如何解决?
报错根因
- 长度不匹配:
stackplot要求所有Y轴序列的长度必须和X轴rewards的长度完全相等。你当前的报错提示存在长度不一致的嵌套序列,说明means字典里至少有一个电影对应的array长度和rewards的长度(230)不符,导致numpy无法生成数值类型的数组,只能生成object类型数组,后续np.isfinite校验数值有效性时触发类型错误。 - 参数传递错误:
stackplot的Y轴参数需要接收多个独立的一维序列,直接传入means.values()会被识别为单个视图对象,不符合参数要求。 - 次要问题:
ax.legend(loc='')传入了空字符串作为位置参数,属于不合法取值,后续即使解决了数据问题也会触发图例相关报错。
修复步骤
- 先校验并修正数据长度
运行以下代码排查长度不匹配的条目:
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一致。
- 修改绘图代码
调整参数传递方式,修正图例位置参数:
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
相关产品推荐
相关产品推荐

