Matplotlib绘制直方图提取最大Y对应X值时无输出如何解决
问题根因
是Python 3的print语法使用错误,属于入门级语法问题。
你代码里的print('maxbin'), b[bin_max][0]写法,在Python 3中print是必须用括号包裹参数的内置函数,这行代码实际执行逻辑是:
- 先单独调用
print('maxbin'),所以终端只会输出maxbin字符串 - 逗号后面的
b[bin_max][0]完全没有被传入print函数,只是一个孤立的表达式,计算完成后没有任何输出动作就被丢弃,自然不会打印你要的X值。
修正方案
把打印行的所有待输出内容都放进print的括号内即可,修正后的完整函数代码:
def Plot_show_us(dfus, dfdus, dfnus): x = dfus['O18ad'] bins=[-22,(...),22] # 此处替换为你实际使用的分箱边界列表 n, b, patches =plt.hist(x, bins, alpha=0.65, label='old') bin_max = np.where(n == n.max()) # 修正print语法,所有打印内容传入括号 print('maxbin', b[bin_max][0]) plt.legend(loc='upper right')
补充优化点:如果存在多个频次相同的最高频分箱,np.where会返回所有匹配的分箱索引,如果你只需要取第一个最高频分箱对应的边界值,可以直接用bin_max_idx = n.argmax()替换np.where的写法,再通过b[bin_max_idx]取值,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Weiss
相关产品推荐
相关产品推荐

