求助:使用Matplotlib绘制的直方图所有柱子高度均为0.10的原因?
问题原因与修复方案
你遇到的柱子高度一致的问题,根源在于传入直方图的数组维度错误:你把np_lst包裹成了二维数组(a = np.array([np_lst]),shape为(1,10)),而Matplotlib的hist函数处理二维数组时,默认会将每一列视为独立的数据集统计——这相当于传入了10个仅含单个数值的小数据集,导致统计逻辑异常,最终出现所有柱子高度相同的错误结果。
修复方法
只需将数组转为一维即可,有两种方式:
方式1:直接使用一维数组
无需额外包裹np_lst,直接创建一维数组传入:
import pandas as pd import numpy as np from matplotlib import pyplot as plt np_lst = [33.48722283633526, 16.015345601144418, 7.9556538136419785, 7.146108329540282, 7.087586969243774, 6.9575395019182, 6.01144417712465, 5.939918070095585, 5.5530268548020025, 3.8461538461538463] # 创建一维数组 a = np.array(np_lst) fig, ax = plt.subplots(figsize = (20,7)) ax.hist(a, bins = [0,10,20,30,40]) plt.show()
方式2:展平二维数组(若需保留原二维结构)
如果因其他需求必须使用二维数组,用flatten()将其转为一维后传入:
ax.hist(a.flatten(), bins = [0,10,20,30,40])
修正后的预期结果
修复后,直方图柱子高度会对应各区间的实际数据数量:
- 0-10区间:8个数据,柱子高度为8
- 10-20区间:1个数据,柱子高度为1
- 20-30区间:0个数据,柱子高度为0
- 30-40区间:1个数据,柱子高度为1
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

