Estoy trazando una imagen con 4 gráficos diferentes usando gnuplot. Las etiquetas para sus ejes x e y tienen el mismo significado. Si lo estoy tramando así:
set multiplot layout 2,2 rowsfirst
set xlabel "x"
set ylabel "y"
set title offset -3,-3
set xrange [20:70]
set yrange [0:15000]
set title "Plot 1"
plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
set xrange [20:70]
set yrange [0:15000]
set title "Plot 2"
plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
set xrange [20:70]
set yrange [0:15000]
set title "Plot 3"
plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
set xrange [20:70]
set yrange [0:15000]
set title "Plot 4"
plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
unset multiplot
Tengo los cuatro gráficos y sus etiquetas, pero quiero lograr tener una etiqueta para los cuatro, como en este ejemplo .
Intenté con la etiqueta no establecida para otras 3 parcelas, pero solo obtengo etiquetas en la primera de ellas, mientras que la otra no tiene etiquetas en absoluto.
En lugar de usar xlabel
y ylabel
, es posible que desee ir con set label
. Por ejemplo,
#!/usr/local/bin/gnuplot
datafile='tmp.dat' # file to plot
set xlabel " " # no x-label
set ylabel " " # no y-label
# assuming all plots have same x and y range
set xrange [-2:2]
set yrange [-4:4]
# same setting for all graph titles
set title offset -3,-3
# puts x-label and y-label manually
set label 1 'x axis' at screen 0.49,0.02
set label 2 'y axis' at screen 0.01,0.5 rotate by 90
# now the graphs: notice that rowsfirst is given by default
set multiplot layout 2,2
do for [i=1:4]{
set title 'plot '.i
plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
unset label 1
unset label 2
}
unset multiplot
reset
Si todos los gráficos se pueden hacer con la misma sintaxis de línea, entonces recomiendo usar un bucle do (como en el ejemplo anterior) en lugar de copiarlo cada vez.
Observe que gnuplot
colocará las etiquetas 1 y 2 cada vez que se traza un gráfico. Es por eso que puse unset label 1
y unset label 2
dentro del do-loop, por lo que las etiquetas se colocan solo en la primera iteración.
Si desea tener algo similar al ejemplo que proporcionó, le recomiendo usar este script (explicado a través de los comentarios):
#!/usr/local/bin/gnuplot
datafile='tmp.dat' # file to plot
# parameters to configure margins of each graph
x0=0.1 # left margin all graphs
y0=0.99 # top margin all graphs
lengthx=0.4 # horizonal length of each graph
lengthy=0.4 # vertical length of each graph
spacex=0.04 # horizontal space between each graph
spacey=0.04 # vertical space between each graph
# This is a macro: configure the top, right, left, and bottom margins of each graph.
# It will depend on the value of i and j.
set macro
i=0; j=0;
SETMARGINS = "set tmargin at screen (y0-i*(lengthy+spacey));\
set bmargin at screen (y0-i*(lengthy+spacey)-lengthy);\
set lmargin at screen (x0+j*(lengthx+spacex));\
set rmargin at screen (x0+j*(lengthx+spacex)+lengthx)"
# Assuming all plots have the same x and y range. If not, set it in each plot below
set xrange [-1.5:1.5]
set yrange [-4:4]
# general setting for plot titles
set title offset -3,-3
# don't worry about the axis labels for now
unset xlabel
unset ylabel
#############################################################
set multiplot
##### top-left
i=0; j=0;
@SETMARGINS # calling the macro for (i,j)=(0,0)
set format x '' # no numbers in x-axis
set format y '%.1f' # but with numbers in y-axis
set title 'plot 1'
plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
##### top-right
i=0; j=1;
@SETMARGINS # calling the macro for (i,j)=(0,1)
set format y '' # no numbers in x nor y-axis
set title 'plot 2'
plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
##### bottom-left
i=1; j=0;
@SETMARGINS # calling the macro for (i,j)=(1,0)
set format xy '%.1f' # numbers in both axes
set title 'plot 3'
plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
##### bottom-left
i=1; j=1;
@SETMARGINS # calling the macro for (i,j)=(1,1)
set format y '' # no numbers in y-axis
# now we set the x and y labels for the 4th plot, and move them to the desired position
set xlabel 'xlabel' offset screen -0.5*(spacex+lengthx),0.0
set ylabel 'ylabel' offset screen -lengthx-1.5*spacex,0.5*(spacey+lengthy)
set title 'plot 4'
plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle
unset multiplot
reset
más información: gnuplotting
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras