gnuplot与x27之间的转换;s坐标系 TL;博士

gnuplot与x27之间的转换;s坐标系 TL;博士,gnuplot,Gnuplot,有没有办法在多点设置中对齐不同绘图的角点 有没有办法将轴坐标转换为屏幕坐标 详细说明 我正在尝试用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

有没有办法在多点设置中对齐不同绘图的角点

有没有办法将
坐标转换为
屏幕
坐标

详细说明 我正在尝试用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;
但是,某些组件(如标签、tics和边框)会绘制两次。然后,当我使用
cairolatex
终端执行此操作时,结果并不像我不堆叠图那样清晰

因此,我希望为第一个绘图绘制这些组件,然后为后续绘图取消设置标签、tic和边框,如下面的代码段所示:

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;
这将生成一个图像,其中下一个绘图与第一个绘图不对齐(在左侧和底部),因为标签和TIC不占用空间

为了解决这个问题,我需要手动设置下一个绘图的原点和大小。左下角必须对齐

从gnuplot文档中,可以使用以下方法获得
屏幕上
坐标的
(X,Y)轴
坐标:

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\u X\u MIN,GPVAL\u Y\u MIN)
。因此,
GRAPH.*=0
SCREEN.*=GPVAL\u TERM.\u1min
。因此:

# 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;
但正如你们所看到的,结果并不是更好

顺便说一下,我没有找到如何定义
大小来对齐右上角

问题 原点计算有什么问题?如何对齐右上角

亲切问候,


Alexis.

为了实现精确的重叠,我认为一种选择是手动调整
边距

set terminal pngcairo
set output 'fig.png'

eps_h = 0.1
eps_w = 0.1

set multiplot
unset key

set lmargin at screen 2*eps_w
set tmargin at screen 1 - eps_h
set rmargin at screen 1 - eps_w
set bmargin at screen eps_h

plot cos(x) w lp lc rgb 'dark-red'

set border ls 4;
unset xlabel
unset ylabel
unset tics

plot 2*cos(x+pi) w lp lc rgb 'royalblue'
其中:

您可以在第一次打印后固定边距以保持自动大小,如下所示(另请参见):


为什么需要重叠两个图,对于给定的示例,您可以简单地使用
plot cos(x)w lp,2*cos(x+pi)w lp
,对于这个简单的示例,确保您的答案是正确的。不过,我的问题是需要重叠的情节。谢谢你的回答。这似乎比我提议的还要容易!然而,图并不完全重叠,有1或2个像素的差异。我想这是由于某种浮点近似。
fix_margins = 'set margins '.\
    'screen GPVAL_TERM_SCALE * GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE), '.\
    'screen GPVAL_TERM_SCALE * GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE), '.\
    'screen GPVAL_TERM_SCALE * GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE), '.\
    'screen GPVAL_TERM_SCALE * GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE)'

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
eval(fix_margins)
unset tics; unset xlabel; unset ylabel
plot 2*cos(x+pi) w lp
unset multiplot