splot
创建 3D 绘图,并希望手动设置所有三个轴的缩放(/长宽比)。
有一些相关的命令,但没有一个能完全做到这一点:
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
绘制的,没有任何进一步的修改:
这就是
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 等比例缩放)。
(这是通过上述解决方法产生的,通过
set view equal xyz
修复轴的缩放,然后通过 splot "data.csv" using ($1*5):2:3 with lines
缩放数据。但是现在,抽动当然会显示错误的值,所以我将其关闭。)
这里有一个建议,可能会对您有所帮助。 我猜“秘密”是以下几行,它基本上是到不同坐标的映射(检查
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
结果: