我用gnuplot堆积了条形图。目前我只获取数据文件并手动设置数据标题。由于我根据数据量对数据进行排序,因此需要重新输入并查看订单。
这是我的Gnuplot文件:
set term pos eps font 20
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set key invert reverse right outside
set boxwidth 0.75
set format y "%.0f%%"
set style line 2 lc rgb "#EDEBE4" lt 1 lw 2
set style line 3 lc rgb "#A7ABA6" lt 1 lw 2
set title "Classification"
set ylabel "Percentage"
set xlabel "System"
set yrange [0:100]
set output 'output.eps'
plot 'datafile' \
using($2):xtic(1) t "stack-1" lt -1 fs pattern 3 , \
'' using($3) t "stack-2" lt -1 fs pattern 2, \
'' using($4) t "stack-3" lt -1 fs pattern 5, \
'' using($5) t "stack-4" lt -1 fs pattern 9, \
'' using($6) t "stack-5" ls 3, \
'' using($7) t "stack-6" lt -1 fs pattern 6, \
'' using($8) t "stack-7" lt -1 fs pattern 4, \
'' using($9) t "stack-8" ls 2
这是我当前的数据文件:
CS 35.08 33.12 22.49 3.72 2.73 1.03 1.76 0.08
FL 58.22 9.36 21.46 4.34 3.65 2.97 0.00 0.00
HB 40.27 19.29 18.52 14.37 6.13 0.91 0.29 0.21
HD 30.32 22.51 31.63 1.10 9.51 2.53 1.50 0.90
MR 34.65 24.37 15.59 7.46 15.42 1.56 0.66 0.29
ZK 29.65 18.54 30.63 6.91 9.46 1.28 2.85 0.68
All 36.74 23.88 22.01 7.40 7.18 1.42 1.06 0.31
我必须将我的数据文件更改为:
stacked-1 stack-2 stack-3 stack-4 stack-5 stack-6 stack-7 stack-8
CS 35.08 33.12 22.49 3.72 2.73 1.03 1.76 0.08
FL 58.22 9.36 21.46 4.34 3.65 2.97 0.00 0.00
HB 40.27 19.29 18.52 14.37 6.13 0.91 0.29 0.21
HD 30.32 22.51 31.63 1.10 9.51 2.53 1.50 0.90
MR 34.65 24.37 15.59 7.46 15.42 1.56 0.66 0.29
ZK 29.65 18.54 30.63 6.91 9.46 1.28 2.85 0.68
All 36.74 23.88 22.01 7.40 7.18 1.42 1.06 0.31
输出:
如何从数据文件的第一行自动创建条形图标题/图例?此外,我的脚本仍需要手动使用模式样式。谢谢!
答案 0 :(得分:1)
使用title columnhead(2)
,您可以选择某个列的标题作为键输入。所以你的plot
命令变为
plot 'datafile' \
using 2:xtic(1) title columnhead(1) lt -1 fs pattern 3 , \
'' using 3 title columnhead(2) lt -1 fs pattern 2, \
'' using 4 title columnhead(3) lt -1 fs pattern 5, \
'' using 5 title columnhead(4) lt -1 fs pattern 9, \
'' using 6 title columnhead(5) ls 3, \
'' using 7 title columnhead(6) lt -1 fs pattern 6, \
'' using 8 title columnhead(7) lt -1 fs pattern 4, \
'' using 9 title columnhead(8) ls 2
这非常详细,因为您的第一列没有标题,因此从中选择标题的列将从用于值的列中删除一个。
如果你要为第一列插入一个虚拟标题,那就足够了,所以请使用set key autotitle columnheader
。
将datafile
更改为
desc stacked-1 stack-2 stack-3 stack-4 stack-5 stack-6 stack-7 stack-8
CS 35.08 33.12 22.49 3.72 2.73 1.03 1.76 0.08
FL 58.22 9.36 21.46 4.34 3.65 2.97 0.00 0.00
HB 40.27 19.29 18.52 14.37 6.13 0.91 0.29 0.21
HD 30.32 22.51 31.63 1.10 9.51 2.53 1.50 0.90
MR 34.65 24.37 15.59 7.46 15.42 1.56 0.66 0.29
ZK 29.65 18.54 30.63 6.91 9.46 1.28 2.85 0.68
All 36.74 23.88 22.01 7.40 7.18 1.42 1.06 0.31
然后使用
set key invert reverse right outside autotitle columnheader
plot 'datafile' \
using 2:xtic(1) lt -1 fs pattern 3 , \
'' using 3 lt -1 fs pattern 2, \
'' using 4 lt -1 fs pattern 5, \
'' using 5 lt -1 fs pattern 9, \
'' using 6 ls 3, \
'' using 7 lt -1 fs pattern 6, \
'' using 8 lt -1 fs pattern 4, \
'' using 9 ls 2