который дает:
Есть ли способ выровнять углы разных участков в мультиплотной настройке?
Есть ли способ конвертироватьaxis
координатыscreen
координаты?
Я пытаюсь создать довольно сложный холст с помощью gnuplot. Чтобы добиться того, чего я хочу, мне нужно точно расположить разные графики друг на друге.
Я сделал что-то вроде:
reset;
set samples 20;
set xrange [-pi:pi]; set yrange [-2:1];
set xlabel "x"; set ylabel "y";
unset key
set multiplot;
plot cos(x) w lp;
plot 2*cos(x+pi) w lp;
unset multiplot;
Однако некоторые компоненты, такие как метка, метки и границы, нарисованы дважды. Затем, когда я делаю это сcairolatex
терминал результат не так ясен, как если бы я не складывал графики.
Таким образом, я хотел бы нарисовать эти компоненты для первого графика, а затем сбросить метки, метки и границы для последующих, как показано во фрагменте ниже:
set multiplot;
plot cos(x) w lp;
set border ls 4; # Just to distinguish it
unset xlabel; unset ylabel;
unset tics;
plot 2*cos(x+pi) w lp;
unset multiplot;
Это создает изображение, в котором следующие графики не выровнены (слева и снизу) с первым, так как метки и метки не занимают места.
Чтобы решить эту проблему, мне нужно установить источник и размер следующих участков вручную. Нижние левые углы должны быть выровнены.
Из документации по gnuplot можно получитьscreen
координируется(X,Y) axis
координаты с использованием:
GRAPH_X = (X - GPVAL_X_MIN) / (GPVAL_X_MAX - GPVAL_X_MIN)
GRAPH_Y = (Y - GPVAL_Y_MIN) / (GPVAL_Y_MAX - GPVAL_Y_MIN)
SCREEN_X = GPVAL_TERM_XMIN + GRAPH_X * (GPVAL_TERM_XMAX - GPVAL_TERM_XMIN)
SCREEN_Y = GPVAL_TERM_YMIN + GRAPH_Y * (GPVAL_TERM_YMAX - GPVAL_TERM_YMIN)
FRAC_X = SCREEN_X * GPVAL_TERM_SCALE / GPVAL_TERM_XSIZE
FRAC_Y = SCREEN_Y * GPVAL_TERM_SCALE / GPVAL_TERM_YSIZE
Поскольку мы пытаемся выровнять левый нижний угол,(X,Y) == (GPVAL_X_MIN, GPVAL_Y_MIN)
, Таким образом,GRAPH_* = 0
а такжеSCREEN_(*) = GPVAL_TERM_\1MIN
, Таким образом:
# Multiply by 1.0 to promote variables to floats
FRAC_X = 1.0 * GPVAL_TERM_XMIN * GPVAL_TERM_SCALE / GPVAL_TERM_XSIZE
FRAC_Y = 1.0 * GPVAL_TERM_YMIN * GPVAL_TERM_SCALE / GPVAL_TERM_YSIZE
Результирующий фрагмент:
set multiplot;
plot cos(x) w lp;
FRAC_X = 1.0 * GPVAL_TERM_XMIN * GPVAL_TERM_SCALE / GPVAL_TERM_XSIZE;
FRAC_Y = 1.0 * GPVAL_TERM_YMIN * GPVAL_TERM_SCALE / GPVAL_TERM_YSIZE;
set origin FRAC_X, FRAC_Y;
set border ls 4; # Just to distinguish it
unset xlabel; unset ylabel;
unset tics;
plot 2*cos(x+pi) w lp;
unset multiplot;
Но, как видите, получающийся сюжет не лучше ...
Кстати, я не нашел, как определитьsize
выровнять верхние правые углы.
Что не так с вычислением происхождения? Как выровнять верхний правый угол?
С уважением,
Алексис.