在gnuplot中使用数字x轴的直方图?

时间:2010-08-07 12:35:19

标签: gnuplot histogram numeric

我将此文件设为data.dat

Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00

我可以使用此脚本hist-v1.gplot(使用set style data histogram)将此数据绘制为直方图:

set xlabel "X values"
set ylabel "Occurence"
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v1.png'
set boxwidth 0.9
# attempt to set xtics so they are positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# ti col reads the first entry of the column, uses it as title name 
plot 'data.dat' using 2:xtic(1) ti col,  '' u 3 ti col, '' u 4 ti col, '' u 5 ti col

并致电:

gnuplot hist-v1.gplot && eog hist-v1.png

生成此图片: image hist-v1.png http://img202.imageshack.us/img202/3974/histv1.png

但是,您可以注意到X轴没有按比例缩放 - 它将X值理解为类别(即它是类别轴)。

我可以使用以下脚本hist-v2.gplot(使用with boxes)获得更多数字X轴:

set xlabel "X values"
set ylabel "Occurence"
# in this case, histogram commands have no effect
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using 1:2 ti col smooth frequency with boxes, '' u 1:3 ti col smooth frequency with boxes

并致电:

gnuplot hist-v2.gplot && eog hist-v2.png

生成此图片: image hist-v2.png http://img266.imageshack.us/img266/6717/histv2.png

不幸的是,这里的栏'重叠',因此很难阅读图表。

有没有办法将数字刻度X轴保持为hist-v2.png,但保持'栏'并排hist-v1.png?这个帖子“Re: Histogram with x axis date error”说你不能:

  

但是很难将x坐标日期从数据文件中拉出来......

然而,它指的是另一个问题...

谢谢,

干杯!

2 个答案:

答案 0 :(得分:2)

好的,在阅读gnuplot帮助之后,似乎直方图样式将“始终”将x轴解释为顺序条目/类别 - 所以的确,似乎无法获得具有直方图样式的数字轴。

但是,事实证明$可以引用一列,而这些可以用来实际“重新定位”第二个(frequency with boxes样式)示例中的小节;所以使用此代码hist-v2b.gplot

set xlabel "X values"
set ylabel "Occurence"
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using ($1-0.5):2 ti col smooth frequency with boxes, '' u ($1-0.25):3 ti col smooth frequency with boxes, '' u ($1+0.25):4 ti col smooth frequency with boxes, '' u ($1+0.5):5 ti col smooth frequency with boxes

并致电:

gnuplot hist-v2b.gplot && eog hist-v2b.png

生成此图片: image hist-v2b.png http://img823.imageshack.us/img823/805/histv2b.png

......这首先是我想要的。

只是一个小小的注释 - 我原本想将脚本与内联数据一起使用;对于像这样的设置,它必须写为

plot '-' using ($1-0.5):2 ti col smooth frequency with boxes, '-' u ($1-0.25):3 ti col smooth frequency with boxes
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end

...也就是说,数据必须多次输入,因为它来自stdin - gnuplot - do multiple plots from data file with built-in commands中讨论了这个问题。

干杯!

PS:由于图上有相当多的空间,如果我们能以某种方式指定单独的x轴范围,那就太好了。这在以下讨论:

答案 1 :(得分:1)

使用“方框”打印样式绘制直方图时,正确设置框宽度非常重要。在我的一篇博客文章中,我谈过它。如有兴趣,请点击here

enter image description here