版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010643777/article/details/82024749
gnuplot multiplot
本篇内容,没有自己的东西,只是对别人贡献的知识的一个整理,gnuplot绘制多图。
multiplot.sh
gnuplot<<!
set terminal pngcairo size 600, 900
set output 'stacking.png'
set lmargin at screen 0.15
set rmargin at screen 0.95
TOP=0.98
DY = 0.29
set multiplot
set offset 0,0,graph 0.05, graph 0.05
set xlabel 'time'
set ylabel 'ylabel 1' offset 1
set tmargin at screen TOP-2*DY
set bmargin at screen TOP-3*DY
set ytics -1000,500,1000
plot 1150*cos(x) title 'First'
set xtics format ''
unset xlabel
set ylabel 'ylabel 2' offset 0
set tmargin at screen TOP-DY
set bmargin at screen TOP-2*DY
set ytics -100,50,100
plot 101*sin(x) title 'Second'
set ylabel 'ylabel 3' offset -1
set tmargin at screen TOP
set bmargin at screen TOP-DY
set ytics -8,4,8
plot 10*sin(2*x) title 'Third'
unset multiplot; set output
set output
exit
!
这里的tmargin,bmargin设置的就是一个子图的高度。
上述脚本可以直接执行,画出的结果:
我更改下脚本,让它画出四个子图。
#! /bin/sh
gnuplot<<!
set terminal pngcairo size 600, 900
set output 'stacking.png'
set lmargin at screen 0.15
set rmargin at screen 0.95
TOP=0.98
DY = 0.23
set multiplot
set offset 0,0,graph 0.05, graph 0.05
set xlabel 'time'
set ylabel 'ylabel 0' offset 1
set tmargin at screen TOP-3*DY
set bmargin at screen TOP-4*DY
set ytics -4 2 4
plot 8*cos(x) title 'Zero'
set xtics format ''
unset xlabel
set ylabel 'ylabel 1' offset 1
set tmargin at screen TOP-2*DY
set bmargin at screen TOP-3*DY
set ytics -1000,500,1000
plot 1150*cos(x) title 'First'
set ylabel 'ylabel 2' offset 0
set tmargin at screen TOP-DY
set bmargin at screen TOP-2*DY
set ytics -100,50,100
plot 101*sin(x) title 'Second'
set ylabel 'ylabel 3' offset -1
set tmargin at screen TOP
set bmargin at screen TOP-DY
set ytics -8,4,8
plot 10*sin(2*x) title 'Third'
unset multiplot;
set output
exit
!
result:
让各个子图之间,有一定的间距:
#! /bin/sh
gnuplot<<!
set terminal pngcairo size 600, 900
set output 'stacking.png'
set lmargin at screen 0.15
set rmargin at screen 0.95
TOP=0.98
DY = 0.21
seam=0.02
set multiplot
set offset 0,0,graph 0.05, graph 0.05
set xlabel 'time'
set ylabel 'ylabel 0' offset 1
set tmargin at screen TOP-3*DY-3*seam
set bmargin at screen TOP-4*DY-3*seam
set ytics -4 2 4
plot 8*cos(x) title 'Zero'
set xtics format ''
unset xlabel
set ylabel 'ylabel 1' offset 1
set tmargin at screen TOP-2*DY-2*seam
set bmargin at screen TOP-3*DY-2*seam
set ytics -1000,500,1000
plot 1150*cos(x) title 'First'
set ylabel 'ylabel 2' offset 1
set tmargin at screen TOP-DY-1*seam
set bmargin at screen TOP-2*DY-1*seam
set ytics -100,50,100
plot 101*sin(x) title 'Second'
set ylabel 'ylabel 3' offset 1
set tmargin at screen TOP
set bmargin at screen TOP-DY
set ytics -8,4,8
plot 10*sin(2*x) title 'Third'
unset multiplot;
set output
exit
!
results:
上下左右各两个:
multiplot.sh
#! /bin/sh
#set lmargin at screen 0.15
#set rmargin at screen 0.95
gnuplot<<!
set terminal pngcairo size 600, 900
set output 'stacking.png'
TOP=0.98
DY = 0.45
seam=0.02
x_gap=0.02
central_axis=0.55
set multiplot
set offset 0,0,graph 0.05, graph 0.05
set xlabel 'time'
set ylabel 'ylabel 0' offset 1
set lmargin at screen 0.15
set rmargin at screen central_axis-x_gap
set tmargin at screen TOP-1*DY-seam
set bmargin at screen TOP-2*DY-seam
set ytics -4 2 4
plot 8*cos(x) title 'Zero'
set xlabel 'time'
unset ylabel
set lmargin at screen central_axis+x_gap
set rmargin at screen 0.95
set tmargin at screen TOP-1*DY-seam
set bmargin at screen TOP-2*DY-seam
set ytics -1000,500,1000
plot 1150*cos(x) title 'First'
set xtics format ''
unset xlabel
set ylabel 'ylabel 2' offset 1
set lmargin at screen 0.15
set rmargin at screen central_axis-x_gap
set tmargin at screen TOP
set bmargin at screen TOP-DY
set ytics -100,50,100
plot 101*sin(x) title 'Second'
set xtics format ''
unset ylabel
set lmargin at screen central_axis+x_gap
set rmargin at screen 0.95
set tmargin at screen TOP
set bmargin at screen TOP-DY
set ytics -8,4,8
plot 10*sin(2*x) title 'Third'
unset multiplot;
set output
exit
!
Result:
reference:
[1]multiplot-stacking
[2]gnuplot demo
[3]How do gnuplot margins work in multiplot mode?
[4]gnuplot使用中的几个设置