который дает:

R

Есть ли способ выровнять углы разных участков в мультиплотной настройке?

Есть ли способ конвертировать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 выровнять верхние правые углы.

Вопросы

Что не так с вычислением происхождения? Как выровнять верхний правый угол?

С уважением,

Алексис.

Ответы на вопрос(2)

Ваш ответ на вопрос