已知区间内数值数量,如何用Python绘制直方图?
用区间计数绘制直方图的方法
如果已经掌握每个区间的数值数量,无需还原原始数据就能快速画出直方图,以下是两种实用方案:
方法一:直接用条形图模拟直方图(推荐)
利用已知的区间计数,通过plt.bar绘制条形图,将宽度设为区间步长即可完美模拟直方图效果:
import numpy as np import matplotlib.pyplot as plt amounts = np.array([23, 7, 18, 5]) # 定义区间左边界:对应[0,1)、[1,2)等区间的左端点 bin_left_edges = np.arange(0, 4) # 绘制条形图,宽度设为区间步长1,添加边框区分区间 plt.bar(bin_left_edges, amounts, width=1, edgecolor='black') # 设置轴标签和标题 plt.xlabel('数值区间') plt.ylabel('数量') plt.title('区间计数直方图') # 调整x轴刻度,显示对应的区间范围 plt.xticks(bin_left_edges + 0.5, ['[0,1)', '[1,2)', '[2,3)', '[3,4)']) plt.show()
这种方法无需生成大量重复数据,效率极高,尤其适合计数数据量较大的场景。
方法二:还原模拟数据后绘制传统直方图
如果需要贴合传统直方图的绘制逻辑,可以先将计数还原为带重复值的模拟原始数据,再用plt.hist绘制:
import numpy as np import matplotlib.pyplot as plt amounts = np.array([23, 7, 18, 5]) # 取每个区间的中点作为代表值(也可选取区间内任意值) bin_midpoints = np.array([0.5, 1.5, 2.5, 3.5]) # 重复每个中点对应次数,生成模拟原始数据 simulated_data = np.repeat(bin_midpoints, amounts) # 定义区间边界 bins = np.arange(0, 5, 1) # 绘制直方图 plt.hist(simulated_data, bins=bins, edgecolor='black') plt.xlabel('数值区间') plt.ylabel('数量') plt.title('模拟原始数据的直方图') plt.show()
这种方法适合需要基于原始数据做后续分析的场景,但如果计数规模很大,会占用较多内存。
内容的提问来源于stack exchange,提问作者joe963
相关产品推荐
相关产品推荐

