我有两个图形,我想将它们作为两个子图形,用一个图例表示,并在 y 轴上用逗号分隔数字(例如 10,000 或 1,000,000)。
这是我目前拥有的:
我尝试使用“设置多图布局 1,2”,但它没有正常工作。
这是我的脚本:
set term postscript eps color blacktext "Helvetica" 24
set output 'figure.eps'
set key outside
#set multiplot layout 1,2
set boxwidth 0.9 absolute
set style line 2 lc rgb 'black' lt 1 lw 1
set style histogram cluster gap 3
set style fill pattern border -1
set datafile missing '-'
set style data histograms
set grid ytics
set xtics border in scale 0,0 nomirror rotate by -45 autojustify
set xtics norangelimit
set xtics ()
set logscale y
plot "A.dat" using 3:xtic(2) title "A" ls 2, \
'' using 4 title "B" ls 2, \
'' using 5 title "C" ls 2, \
'' using 6 title "D" ls 2
set datafile missing "?"
set logscale y
set style line 2 lc rgb 'black' lt 1 lw 1
set style histogram cluster gap 3
set style fill pattern border -1
set grid ytics
plot "B.dat" using 3:xtic(1) title "A" ls 2, \
'' using 4 title "B" ls 2, \
'' using 5 title "C" ls 2, \
'' using 6 title "D" ls 2
unset multiplot
以及数据文件A.dat:
A B C D E F G
27 0.2 653.265 388.834 12.396 1.898 57406951
27 0.4 1514.187 892.661 97.012 4.224 129889867
B.数据:
A B C D E F G
25 0.6 312.987 216.049 54.973 1.085 33480428
28 0.6 3265.277 ? 558.423 8.769 268065210
29 0.6 7163.007 ? 1175.738 17.665 536407888
30 0.6 15958.110 ? 2620.629 36.811 1073243951
31 0.6 ? ? 5361.464 74.357 2145001741
答案1
在您的多图中,您可以unset key
让第一个图不获取图例,而对于第二个图,您可以使用at x,y
x,y 在图的坐标系中的位置明确放置图例。这可能并不完美,因为生成的 EPS 边界框似乎不包含位移的图例,因此您可能需要编辑生成的 PostScript。
为了使千位组以逗号分隔,我知道您应该能够让您的语言环境为您执行此操作,方法是使用set format "%'.0f"
但这对我来说不起作用,即使LC_ALL=en_US
在环境中也是如此。另一种方法是修复生成的 PostScript 使用sed
以添加逗号。例如,添加行
set format sprintf("XYZ%'.0f")
其中 XYZ 是一些不会出现在输出中的任意字符串,然后使用脚本对输出进行后处理:
sed -i '
/XYZ/{
:loop
s/\(XYZ.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
tloop
s/XYZ//
}
' figure.eps
最初,你会有这样的行
[ [(Helvetica) 240.0 0.0 true true 0 (XYZ100000)]
在您的文件中,上面将用XYZ100000
替换100,000
。
对于上述内容,我set key at 13,10000
在第二个图之前使用了它并删除了它set key outside
。