gnuplot 多图布局不被设置原点覆盖,定位子图的方法

gnuplot multiplot layout not being overridden by set origin, ways to position subplots

这个问题在某些方面与已经提出的问题相同。但是所引用的问题从未得到关于这里出现的问题是错误还是文档混乱的答案。

关于 multiplotlayout 选项的文档说明:

With the layout option you can generate simple multiplots without having to give the set size and set origin commands before each plot: Those are generated automatically, but can be overridden at any time.

我对该文本的理解是布局设置原点和大小,我可以随时更改这些规范。那么这应该有效:

set xrange [0:10]
set multiplot layout 3,1 margins 0.1,0.95,0.12,0.95 spacing 0,0
unset key
plot cos(x) axes x1y1 w l ls 3 notitle
plot sin(x) axes x1y1 w l ls 3 notitle
set key bottom center out horizontal
plot sin(x) axes x1y1 w l ls 3 notitle
set origin 0.3,0.5
set size 0.2,0.1
set xrange [1:2]
plot cos(x) axes x1y1 w l ls 3 notitle
unset multiplot

但事实并非如此。 gnuplot 完全忽略 set sizeset origin 命令。它应该做的是在彼此下面绘制 3 个图,然后在屏幕位置 (0.3,0.5) 处创建一个插图,其大小相对于 canvas (0.2,0.1).

我的问题是:

  1. 这是一个应该报告的 bug 还是这个表述不当的文档问题(该布局可以被 set positionset size 覆盖)?
  2. multiplot 提供了两种定位子图的方式,set origin + set sizeset *margin 其中 * 代表 [=25] 之一=].有人可以在应该使用哪个时提供更深入的解释吗? (对我来说,我觉得这样做的正确方法是 set origin 并且边距只是一个有用的肮脏技巧,但不是为了那个)
  3. 生成我正在寻找的且易于重现的情节的最简洁方法是什么(对于任何其他问题,不仅仅是 3 个情节,而是任何情节,并且没有一些乏味的位置计算)?
  4. 有没有办法在指定 layout 选项时打印 originsize、边距和任何其他自动计算(和使用)的相关设置?
  1. 我的猜测是文档有点不清楚。

  2. 这是一个品味和方便的问题,取决于您的情况。设置原点和大小就是设置(sub-)"canvas"的位置。这个 (sub-)"canvas" 仍然可以有一些单独的 b,t,l,r 边距。注意,边距是图形边框和 canvas-border.

    之间的 space
  3. 显然,您在多图布局中设置的边距是为您的额外图保留的。 所以,显然你必须重置它们,例如set margins 0,0,0,0。然后你可能会得到你想要的情节。

  4. 我不知道您可以提取自动计算的边距值。没有这样的值 列于 show var GPVAL.

代码:

### multiplot layout with manual origin and size
reset session

set xrange [0:10]
unset key
set ytics 0.5

set multiplot layout 3,1 margins 0.1,0.95,0.12,0.95 spacing 0,0

    plot cos(x) axes x1y1 w l ls 3 notitle
    
    plot sin(x) axes x1y1 w l ls 3 notitle

    set key bottom center out horizontal
    plot sin(x) axes x1y1 w l ls 3 notitle

    set margins 0,0,0,0
    set origin 0.3,0.5
    set size 0.2,0.1
    set xrange [1:2]
    plot cos(x) axes x1y1 w l ls 3 notitle
unset multiplot
### end of code

结果: