Python绘制直方图叠加散点图报x and y must be the same size错误求解
问题原因排查
- 报错核心原因是
plt.scatter传入的x、y参数长度不一致:np.histogram未指定bins参数时默认将数据分为10组,返回的counts数组长度固定为10,代表每组的密度值- 你自行生成的
p = np.arange(0.001, 100000, 0.01)数组长度接近1000万,和长度为10的counts完全不匹配,因此触发尺寸校验报错
- 额外问题:你自定义的
p数组和直方图的bin区间没有对应关系,即使强行调整长度一致,也无法让散点正确叠加到直方图的对应位置上。
修复方案
如果需要在直方图的每个bin的中心点位置叠加散点,直接基于np.histogram返回的bins数组计算每个bin的中点作为x坐标即可,不需要自定义p数组,参考代码如下:
import numpy as np import matplotlib.pyplot as plt # 原有直方图绘制逻辑(你之前已经正常渲染的部分保留即可) plt.hist(ppthdf['PPth'], density=True, bins=10) # bins数量要和下面histogram调用的一致 # 计算直方图数据和bin中点 counts, bins = np.histogram(ppthdf['PPth'], density=True, bins=10) bin_centers = (bins[:-1] + bins[1:]) / 2 # 计算每个bin的中心点坐标 # 叠加散点 plt.scatter(bin_centers, counts, s=100, c='red') plt.show()
如果需要调整分组数量,统一修改两处bins参数的数值即可。
内容的提问来源于stack exchange,提问作者Manoel Neto
相关产品推荐
相关产品推荐

