如何在Julia中为计数型Y轴的直方图添加密度曲线?
在Julia中为直方图添加密度曲线并保留计数值Y轴
要实现Y轴为计数值的直方图+密度曲线,核心是将密度函数(pdf)的结果按直方图的bin宽度和样本总数缩放,让曲线的数值范围和计数值对齐。具体实现如下:
解决思路
原代码用normalize=true把直方图转换成了密度值(Y轴总和为1),我们需要:
- 先绘制常规计数值直方图,获取bin的宽度参数
- 用「样本总数 × bin宽度」作为缩放因子,把pdf的结果放大到计数值尺度
- 最后叠加缩放后的密度曲线
完整代码示例
# 安装并导入依赖包 Pkg.add("Plots") Pkg.add("Distributions") using Distributions, Plots # 生成测试数据 dist = Normal(0, 1) data = rand(dist, 1000) n_samples = length(data) # 绘制计数值直方图,同时保存直方图对象用于提取bin信息 hist = histogram(data, label="计数值直方图") # 提取bin宽度:取第一个bin的右边界与左边界的差值 bin_width = hist[1][1][2] - hist[1][1][1] # 计算缩放因子,将pdf值转换为计数值尺度 scale_factor = n_samples * bin_width # 叠加缩放后的密度曲线 plot!(x -> pdf(dist, x) * scale_factor, xlim=xlims(), label="密度曲线(计数值尺度)", linewidth=2)
关键细节说明
- 从直方图对象中提取
bin_width:直方图的底层bin边界数据存在hist[1][1]中,相邻两个边界的差就是单个bin的宽度 - 缩放因子的逻辑:密度函数的积分结果是1,乘以样本数得到"总概率对应的样本量",再乘以bin宽度就对应到每个bin的预期计数值,确保曲线与直方图的Y轴尺度完全匹配
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

