Gnuplot:设置 3D 图中 x 和 y 轴的纵横比

问题描述 投票:0回答:1

我正在 gnuplot 6.0 中通过

splot
创建 3D 绘图,并希望手动设置所有三个轴的缩放(/长宽比)。

有一些相关的命令,但没有一个能完全做到这一点:

  • z 轴的比例可以使用

    set view
    命令的第四个参数来设置。这正是我想要的,但该命令仅适用于 z 轴。这就是为什么标题说“x & y”,需要有其他方法来缩放这两个。

  • 对于 2D 绘图,您可以使用

    set size ratio <r>
    设置 x 轴和 y 轴的纵横比,但是 这在 3D 绘图中不起作用
    (您也可以执行
    set size <xscale>,<yscale>
    ,它适用于 2D 绘图,但对于 3D 绘图,它会缩放屏幕上的最终 2D 投影,而不是轴。)

  • 我能找到的设置 x 和 y 缩放比例的 3D 绘图的唯一选项是

    set view equal xy
    (或
    set view equal xyz
    ),这会强制轴采用 1:1(:1) 的纵横比。但我想设置一个不同于 1:1(:1) 的宽高比。

(我能想到的唯一解决方法是缩放数据本身,然后修改刻度线进行补偿。但感觉必须有更好的方法。)


示例

这是一条简单的线,有两个矩形“脉冲”,一个在 y 方向,一个在 z 方向。它是用

splot "data.csv" with lines
绘制的,没有任何进一步的修改:

Basic splot image

这就是

data.csv
的样子:

0 0 0
1 0 0
1 3 0
2 3 0
2 0 0
3 0 0
4 0 0
4 0 3
5 0 3
5 0 0
6 0 0

我想要的是这样的,其中 x:y:z 缩放比例为 5:1:1 (因此 x 轴上的一个单位长度显示为 y 或 z 轴上的一个单位长度的 5 倍,并且 y 和z 等比例缩放)。

Scaled splot

(这是通过上述解决方法产生的,通过

set view equal xyz
修复轴的缩放,然后通过
splot "data.csv" using ($1*5):2:3 with lines
缩放数据。但是现在,抽动当然会显示错误的值,所以我将其关闭。)

plot graphics gnuplot
1个回答
0
投票

这里有一个建议,可能会对您有所帮助。 我猜“秘密”是以下几行,它基本上是到不同坐标的映射(检查

help nonlinear
)。

set view equal xyz
Rx = 5.0
set nonlinear x via x*Rx inverse x/Rx

但是,还有一些事情:

  • set view 60,30, 3,3
    :将 x 和 z 缩放 3 倍以用图形填充画布
  • 例如
    set xtics 1 scale 4.0 offset -1.0,-0.5
    调整 xtic 的长度和 xticlabel 的偏移量。 ytics 和 ztics 类似

我还不清楚什么,例如如果您想设置

x:y:z
5:1:2

的比率
  • 为什么
    set nonlinear z via z*Rz inverse z/Rz
    将图形移到画布之外以及如何将其移回来?

脚本:

### set visually different xyz ratio than 1:1:1
reset session

$Data <<EOD
0 0 0
1 0 0
1 3 0
2 3 0
2 0 0
3 0 0
4 0 0
4 0 3
5 0 3
5 0 0
6 0 0
EOD

set view equal xyz
set view 60,30, 3,3
Rx = 5.0
Ry = 1.0
Rz = 1.0
set nonlinear x via x*Rx inverse x/Rx
set nonlinear y via y*Ry inverse y/Ry
# set nonlinear z via z*Rz inverse z/Rz   # this will lead to a shift of the graph

unset key
set tics out
set xtics 1 scale 4.0 offset -1.0,-0.5
set mxtics Rx
set yrange[-1:4]
set ytics 1 scale 0.333 offset -2.0, 0.5
set ztics 1 scale 1.0
set xyplane relative 0
set grid x,mx,y,z vertical
set border 1+2+4+8+16+32+64+256+512

splot $Data u 1:2:3 w l lw 2 lc "red"
### end of script

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.