3

我有这个文件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

生成此图像: 图像 hist-v1.png

但是,您会注意到 X 轴没有按数字缩放 - 它将 X 值理解为类别(即它是一个类别轴)。

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

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

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

不幸的是,这里的条形“重叠”,因此很难阅读图表。

有没有办法让数字刻度 X 轴保持不变,但保持“条形”hist-v2.pnghist-v1.png这个线程,“ Re: Histogram with x axis date error ”说你不能:

但是很难从数据文件中提取 x 坐标日期,...

但是,它指的是一个不同的问题......

谢谢,

干杯!

4

2 回答 2

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

此图像生成: 图像 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

...也就是说,数据必须多次输入,因为它来自标准输入 - 这个问题在gnuplot 中讨论 - 使用内置命令从数据文件中进行多个绘图

干杯!

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

于 2010-08-07T23:14:27.010 回答
1

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

在此处输入图像描述

于 2011-09-17T11:25:26.210 回答