Gnuplot 5.4多图布局下如何在绘图下方添加文本并保持尺寸
Gnuplot 5.4 添加全局图注的解决方法
问题描述
我正在使用Gnuplot 5.4版本,通过以下代码生成了2×2布局的4幅绘图:
set size 1, 1 set origin 0.0, 0.0 set term postscript eps enhanced color 'Helvetica' 15 set output 'sig_tau2.eps' set multiplot layout 2,2 set style fill solid 1.0 noborder set size square set xtics ("0" 0, "175" 175, "350" 350) font "Helvetica,15" set ytics ("0" 0, "2" 2, "4" 4) font "Helvetica,15" set cbtics ("-0.0075" -0.0075, "0" 0, "0.0075" 0.0075) font "Helvetica,15" set xlabel "{/Symbol t}" font "Helvetica,15" set label "{/Symbol s}" font "Helvetica,15" at graph -0.3, graph 0.6 set label "{Re{/Symbol z}_{max}}" font "Helvetica,15" at graph 1.3, graph 0.5 set pm3d map #Achte auf das Format der Datendatei (Leerzeilen!) set cbrange [-0.0075:0.0075] set xrange [0:350] set yrange [0:4] set palette defined (-0.0075 0 0 1, 0 0 1 0, 0 "yellow", 0.0075 1 0 0) set colorbox set title "(a)" font "Helvetica Bold,15" unset key splot "1.dat" u 1:2:4 title"" unset xtics unset ytics unset cbtics unset xlabel unset label unset label unset cbrange unset xrange unset yrange unset pm3d set xtics ("0" 0, "175" 175, "350" 350) font "Helvetica,15" set ytics ("0" 0, "2" 2, "4" 4) font "Helvetica,15" set cbtics ("-0.0075" -0.0075, "0" 0, "0.0075" 0.0075) font "Helvetica,15" set xlabel "{/Symbol t}" font "Helvetica,15" set label "{/Symbol s}" font "Helvetica,15" at graph -0.3, graph 0.6 set label "{Re{/Symbol z}_{max}}" font "Helvetica,15" at graph 1.3, graph 0.5 set pm3d map #Achte auf das Format der Datendatei (Leerzeilen!) set cbrange [-0.0075:0.0075] set xrange [0:350] set yrange [0:4] set palette defined (-0.0075 0 0 1, 0 0 1 0, 0 "yellow", 0.0075 1 0 0) set colorbox set title "(b)" unset key splot "2.dat" u 1:2:4 title"" unset xtics unset ytics unset cbtics unset xlabel unset label unset label unset cbrange unset xrange unset yrange unset pm3d set xtics ("0" 0, "175" 175, "350" 350) font "Helvetica,15" set ytics ("0" 0, "4" 4, "8" 8) font "Helvetica,15" set cbtics ("-0.0075" -0.0075, "0" 0, "0.0075" 0.0075) font "Helvetica,15" set xlabel "{/Symbol t}" font “Helvetica,15" set label "{/Symbol s}" font "Helvetica,15" at graph -0.3, graph 0.6 set label "{Re{/Symbol z}_{max}}" font "Helvetica,15" at graph 1.3, graph 0.5 set pm3d map #Achte auf das Format der Datendatei (Leerzeilen!) set cbrange [-0.0075:0.0075] set xrange [0:350] set yrange [0:8] set palette defined (-0.0075 0 0 1, 0 0 1 0, 0 "yellow", 0.0075 1 0 0) set colorbox set title "(c)" unset key splot "3.dat" u 1:2:4 title"" unset xtics unset ytics unset cbtics unset xlabel unset label unset label unset cbrange unset xrange unset yrange unset pm3d set xtics ("0" 0, "175" 175, "350" 350) font "Helvetica,15" set ytics ("0" 0, "6" 6, "12" 12) font "Helvetica,15" set cbtics ("-0.0075" -0.0075, "0" 0, "0.0075" 0.0075) font "Helvetica,15" set xlabel "{/Symbol t}" font "Helvetica,15" set label "{Figure 2: Stability region of the endemic equilibrium in σ-τ plane. Color code denotes the maximum real part of ζ.}" font "Helvetica,15" at graph -0.3, graph -0.1 set label "{/Symbol s}" font "Helvetica,15" at graph -0.3, graph 0.6 set label "{Re{/Symbol z}_{max}}" font "Helvetica,15" at graph 1.3, graph 0.5 set pm3d map #Achte auf das Format der Datendatei (Leerzeilen!) set cbrange [-0.0075:0.0075] set xrange [0:350] set yrange [0:12] set palette defined (-0.0075 0 0 1, 0 0 1 0, 0 "yellow", 0.0075 1 0 0) set colorbox set title "(d)" unset key splot "4.dat" u 1:2:4 title"" unset multiplot
我希望在这4幅绘图的下方添加全局图注(整行说明文本),同时保持原有绘图尺寸不变。之前尝试在第4幅图中用set label设置位置,但文本并未出现在输出文件中,请问该如何实现?
解决方法
问题核心在于:multiplot模式下,单幅子图的graph坐标系仅作用于当前子图,超出子图范围的元素会被裁剪;且你之前将图注绑定在第4个子图上,位置设置超出子图可视区域后无法显示。
正确实现步骤如下:
1. 预留图注空间
在开启multiplot前,通过调整底部边距预留图注位置,确保原有子图布局不受影响:
set bmargin at screen 0.15 # 底部预留15%的画布空间给图注
2. 绘制全局图注
所有子图绘制完成后,使用screen坐标系(基于整个画布)定位图注,并执行空plot命令触发渲染:
修改后的完整关键代码片段:
set size 1, 1 set origin 0.0, 0.0 set term postscript eps enhanced color 'Helvetica' 15 set output 'sig_tau2.eps' # 底部预留图注空间 set bmargin at screen 0.15 set multiplot layout 2,2 # ... 此处保留原有4个子图的绘制代码不变 ... # 所有子图绘制完成后添加全局图注 unset xtics unset ytics unset pm3d unset colorbox # 用screen坐标系定位到画布底部居中 set label "Figure 2: Stability region of the endemic equilibrium in σ-τ plane. Color code denotes the maximum real part of ζ." \ font "Helvetica,15" at screen 0.5, screen 0.05 center # 空plot命令触发图注绘制 plot NaN notitle unset multiplot
额外优化建议
- 提取公共配置:将
palette、cbrange等重复设置放在multiplot前统一配置,减少代码冗余。 - 多行图注:如需换行,可在文本中加入
\n,结合center参数实现多行居中。
内容的提问来源于Stack Exchange,提问作者Althaqel
相关产品推荐
相关产品推荐

