使用框在同一文件上绘制不同的列

时间:2013-08-14 13:13:10

标签: plot gnuplot

我有一个看起来像

的文件
$cat myfile.dat

1 8 32 19230 1.186 3.985
1 8 64 9620 0.600 7.877
1 8 128 4810 0.312 15.136
1 8 256 2410 0.226 20.927
1 8 512 1210 0.172 27.708
1 8 1024 610 0.135 35.582
1 8 2048 310 0.121 40.172
1 8 4096 160 0.117 43.141
1 8 8192 80 0.112 44.770
.....
2 8 16384 300 0.692 6.816
2 8 32768 150 0.686 6.877
2 8 65536 80 0.853 5.904
2 10 320 7830 1.041 4.575
2 10 640 3920 0.919 5.189
2 10 1280 1960 0.828 5.757
2 10 2560 980 0.773 6.167
2 10 5120 490 0.746 6.391
2 10 10240 250 0.748 6.507
2 10 20480 130 0.770 6.567
....
3 18 8192 10 1.311 12.759
3 20 32 650 1.631 3.978
3 20 64 330 0.838 7.863
3 20 128 170 0.483 14.046
3 20 256 90 0.508 14.160
3 20 512 50 0.559 14.283
3 20 1024 30 0.665 14.405
3 20 2048 20 0.865 14.782
3 20 4096 10 0.856 14.932
3 20 8192 10 1.704 14.998

如您所见,根据我们想要的列x,有很多方法可以绘制此信息。我希望绘制信息的方法之一是第1列的第6列

p "myfile.dat" u 1:6

enter image description here

我的主要问题是,是否有办法将这些条形图作为实心框,因为我们只对所达到的峰值感兴趣,而不是对点的频率或密度区域感兴趣。

2 个答案:

答案 0 :(得分:2)

Gnuplot有smooth选项,可以使用,例如作为smooth frequency汇总所有y - 相同x - 值的值。不幸的是,这里没有smooth maximum,但是可以通过Using语句中的一些欺骗来“模仿”。

reset
xval = -1000
max(x, y) = (x > y ? x : y)
maxval = 0
colnum = 6

set boxwidth 0.2

plot 'mydata.dat' using (val = column(colnum), $1):\
     (maxval_prev = (xval == $1 ? maxval : 0), \
      maxval = (xval == $1 ? max(maxval, val) : val),\
      xval = $1, \
      (maxval > maxval_prev ? maxval-maxval_prev : 0)\
     ) \
     smooth frequency lw 3 with boxes t 'maximum values'

每个using条目可以包含不同的分配,这些分配用逗号分隔。

如果出现新的x值,则初始化变量。这是有效的,因为数据在x smooth frequency {{1}}内是单调的。

如果当前值大于存储的最大值,则添加存储的最大值和当前值之间的差值。潜在地,这可能导致由于重复加法和减法而导致的数值误差,但是从您的样本数据判断并给出图的分辨率,这应该不是问题。

您的数据结果是: enter image description here

答案 1 :(得分:1)

你可以搜索最大值并仅绘制它,但这可能更容易,即使它相互吸引了很多方框:

plot "myfile.dat" using 1:6:(.1) with boxes fillstyle solid