You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:40:36