如何用gnuplot绘制统计数值出现次数的直方图?
解决Gnuplot绘制单列数据直方图的问题
我明白你的困扰啦——直接用plot "file.dat" with boxes确实达不到你想要的效果,因为这个命令默认把每行的行号当作横轴x值,把文件里的数值当作纵轴y值,自然画不出统计频次的直方图。
要画出横轴是数值、纵轴是出现次数的高斯形状直方图,你需要用gnuplot的**分箱(binning)**功能来统计每个数值区间的出现频次,具体步骤如下:
1. 基础直方图绘制命令
先定义分箱的宽度和分箱函数,再结合smooth freq来自动统计频次:
# 设置填充样式,让直方图更美观 set style fill solid 0.7 border # 定义分箱宽度,可根据你的数据分布调整,比如高斯数据用0.5 binwidth = 0.5 # 分箱函数,让每个箱的中心落在区间中点 bin(x) = binwidth * floor(x/binwidth) + binwidth/2 # 绘制直方图:用分箱后的数值作为横轴,每个数据点计数1,smooth freq统计总次数 plot "file.dat" using (bin($1)):(1) smooth freq with boxes title "Gaussian Data Histogram"
2. 优化显示效果(可选)
为了让直方图更清晰,你可以添加这些设置:
- 设置坐标轴标签:
set xlabel "Value" set ylabel "Occurrence Count" - 根据高斯数据的范围调整横轴区间(比如均值0、标准差1的话,设为[-3:3]覆盖大部分数据):
set xrange [-3:3] - 如果想要更平滑的视觉效果,可以调整箱宽,或者添加网格:
set grid ytics
为什么这个方法有效?
bin($1)把文件里的每个数值(第一列$1)分配到对应的区间里,确保相同范围的数值被归为一组;:(1)表示每个数据点对所在区间贡献1次计数;smooth freq会自动统计每个分箱区间内的总次数,作为纵轴的数值,这样画出来的boxes就是你想要的频次直方图啦。
内容的提问来源于stack exchange,提问作者Andrea Angeletti
相关产品推荐
相关产品推荐

