t.dat文件如下所示:
260.37
260.04
261.53
261.32
260.19
260.49
260.43
260.59
260.26
260.68
260.28
259.93
260.82
259.50
260.29
260.52
260.30
259.91
262.24
260.58
260.74
260.22
261.66
260.31
260.99
259.79
260.90
259.88
260.19
261.50
259.32
260.79
259.94
260.35
260.03
260.07
261.86
261.09
260.60
260.15
75.17
75.16
75.33
75.31
75.34
75.04
75.49
75.25
75.27
75.32
75.10
75.75
75.58
74.86
75.19
75.44
75.29
75.31
75.55
75.91
75.39
75.65
75.85
75.67
75.62
74.87
75.64
75.69
75.13
77.76
75.31
74.87
75.75
75.27
75.61
74.84
75.72
75.40
74.96
75.33
67.20
67.26
68.15
68.67
68.88
67.56
67.71
66.87
68.74
67.32
66.92
69.62
67.29
66.87
68.33
67.73
68.66
68.75
67.00
67.22
66.93
68.81
67.29
67.18
67.33
67.91
70.34
67.15
68.37
69.60
69.74
69.62
67.33
66.79
67.90
67.39
69.88
68.48
68.96
67.36
47.82
47.54
47.74
47.95
47.65
47.71
47.64
47.71
47.47
48.19
47.82
48.06
47.88
48.22
48.31
47.58
47.41
47.85
47.71
47.93
48.34
47.95
48.70
47.58
47.86
47.96
47.80
48.00
47.51
47.56
47.50
47.52
47.47
47.76
47.53
48.27
47.26
47.79
47.67
47.57
目标是打印4个系列的直方图,每个直方图用空格分隔,每40行一组。因此直方图组1绘制了1:40行的数据,第二组绘制了41:80行的数据,依此类推。 到目前为止,我已经设法分别打印第一组直方图:
set boxwidth 0.9 relative
set style data histograms
set style fill solid 1.0 border -1
set xtics ("1" 20, "4" 60, "8" 100, "16" 140)
plot 't.dat' using 1 with boxes ls 6 axes x1y1
并打印连接的四个组:
plot 't.dat' using 1 every ::0::39 with boxes ls 6 axes x1y1
如何在同一个地块中绘制其他群体?
答案 0 :(得分:0)
请注意,set style data histograms
会被忽略,因为您使用with boxes
覆盖它,boxes
和histograms
是不同的方法来绘制条形图分组和安排数据。
如果你可以用
绘制第一组plot "t.dat" using 0:1 every ::0::39 with boxes
然后你可以用
绘制第二组plot "t.dat" using 0:1 every ::40::79 with boxes
(using 1
,就像你使用的那样被gnuplot隐含地转换为using 0:1
。
这两个图将重叠,因为第0列,即当前行的编号仅计算应用every
过滤器后可用的行,因此在两种情况下,x值都从0
变为39
。要将两者都绘制在彼此之下,您必须将40
添加到第二个图(或者41
以使两者之间有一个小的差距:
plot "t.dat" using 0:1 every ::0::39 with boxes,\
"" using ($0 + 41):1 every ::40::79 with boxes
现在,要绘制所有四个组,您可以展开此绘图命令以保持其他两个组,或者使用
迭代它们set boxwidth 0.7 relative
set style fill solid 1.0 noborder
set xtics ("1" 19.5, "4" 60.5, "8" 101.5, "16" 142.5)
unset key
plot for [i=1:4] 't.dat' using ($0+(i-1)*41):1 every ::((i-1)*40)::(i*40-1) with boxes lt i