在gnuplot中设置与图形坐标相关的边距,而不是屏幕

在gnuplot中设置与图形坐标相关的边距,而不是屏幕,gnuplot,margins,Gnuplot,Margins,我正试图在我的主要情节中再画一个情节。我有具体的坐标,我想把我的第二个绘图相对于第一个绘图。例如,我希望第二个绘图的左边距在x=2线上,右边距在x=8线上,依此类推,如示例图像所示。目前,我通过反复试验来完成这项工作。我手动放置第二个绘图的边距,直到对其位置满意为止。然而,这很费时,我相信有一种更聪明的方法可以做到这一点 您可以在父图上施加规定的边距(以屏幕单位表示),然后根据父图的已知x/y范围和所需的插入位置计算插入的边距(也以屏幕单位表示): set terminal pngcairo e

我正试图在我的主要情节中再画一个情节。我有具体的坐标,我想把我的第二个绘图相对于第一个绘图。例如,我希望第二个绘图的左边距在x=2线上,右边距在x=8线上,依此类推,如示例图像所示。目前,我通过反复试验来完成这项工作。我手动放置第二个绘图的边距,直到对其位置满意为止。然而,这很费时,我相信有一种更聪明的方法可以做到这一点


您可以在父图上施加规定的边距(以屏幕单位表示),然后根据父图的已知x/y范围和所需的插入位置计算插入的边距(也以屏幕单位表示):

set terminal pngcairo enhanced font ",16"
set output "fig.png"

fig_lmargin = 0.2
fig_rmargin = 0.9
fig_bmargin = 0.2
fig_tmargin = 0.9

p1_xMin = 0.
p1_xMax = 10.
p1_yMin = 0.
p1_yMax = 1.

p2_xMin = 0.
p2_xMax = 0.7
p2_yMin = 0.
p2_yMax = 1.

inset_xMin = 2.
inset_xMax = 8.
inset_yMin = 0.25
inset_yMax = 0.75

set multiplot

set lmargin at screen fig_lmargin
set rmargin at screen fig_rmargin
set tmargin at screen fig_tmargin
set bmargin at screen fig_bmargin

set xr [p1_xMin:p1_xMax]
set yr [p1_yMin:p1_yMax]

set linetype 42 lc rgb '#333333' dt 3
set arrow from inset_xMin,p1_yMin to inset_xMin,p1_yMax nohead lt 42
set arrow from inset_xMax,p1_yMin to inset_xMax,p1_yMax nohead lt 42
set arrow from p1_xMin,inset_yMin to p1_xMax,inset_yMin nohead lt 42
set arrow from p1_xMin,inset_yMax to p1_xMax,inset_yMax nohead lt 42

plot x

p1_widthScreen = fig_rmargin - fig_lmargin
p1_widthPlot = p1_xMax - p1_xMin
p1_heightScreen = fig_tmargin - fig_bmargin
p1_heightPlot = p1_yMax - p1_yMin

unset arrow

set lmargin at screen fig_lmargin + (inset_xMin - p1_xMin)/p1_widthPlot*p1_widthScreen
set rmargin at screen fig_lmargin + (inset_xMax - p1_xMin)/p1_widthPlot*p1_widthScreen
set bmargin at screen fig_bmargin + (inset_yMin - p1_yMin)/p1_heightPlot*p1_heightScreen
set tmargin at screen fig_bmargin + (inset_yMax - p1_yMin)/p1_heightPlot*p1_heightScreen

plot x

编辑:

使用@Christoph链接中概述的技术,可以将上面的脚本简化为:

set terminal pngcairo enhanced font ",16"
set output "fig.png"

xMin = 0.
xMax = 10.
yMin = 0.
yMax = 1.

inset_xMin = 2.
inset_xMax = 8.
inset_yMin = 0.25
inset_yMax = 0.75

set multiplot

set xr [xMin:xMax]
set yr [yMin:yMax]

set linetype 42 lc rgb '#333333' dt 3
set arrow from inset_xMin,yMin to inset_xMin,yMax nohead lt 42
set arrow from inset_xMax,yMin to inset_xMax,yMax nohead lt 42
set arrow from xMin,inset_yMin to xMax,inset_yMin nohead lt 42
set arrow from xMin,inset_yMax to xMax,inset_yMax nohead lt 42

plot x

lmargin = GPVAL_TERM_SCALE * GPVAL_TERM_XMIN / (1.*GPVAL_TERM_XSIZE)
rmargin = GPVAL_TERM_SCALE * GPVAL_TERM_XMAX / (1.*GPVAL_TERM_XSIZE)
bmargin = GPVAL_TERM_SCALE * GPVAL_TERM_YMIN / (1.*GPVAL_TERM_YSIZE)
tmargin = GPVAL_TERM_SCALE * GPVAL_TERM_YMAX / (1.*GPVAL_TERM_YSIZE)

widthScreen = rmargin - lmargin
heightScreen = tmargin - bmargin
widthPlot = xMax - xMin
heightPlot = yMax - yMin

unset arrow

set lmargin at screen lmargin + (inset_xMin - xMin)/widthPlot*widthScreen
set rmargin at screen lmargin + (inset_xMax - xMin)/widthPlot*widthScreen
set bmargin at screen bmargin + (inset_yMin - yMin)/heightPlot*heightScreen
set tmargin at screen bmargin + (inset_yMax - yMin)/heightPlot*heightScreen

set xr [0:0.7]
set yr [0:1.0]

plot x

不需要固定主地块的边距。请参阅关于如何在
绘图后以屏幕坐标获得计算的边距。