我在 Gnuplot 中制作了一些 3D 曲面图,在我的图的每个边界上都有 tic 标记会非常有用。在随附的示例图中,左上角或右上角水平边界(边界 256 和 512)上没有 tic 标记。为了在后面的垂直平面上绘制垂直网格线,我需要在这些边框上有 tic 标记。我怎样才能做到这一点?
2 回答
我还没有找到使用grid
and解决这个问题的方法border
。但是,有一个相对简单的解决方法,它仅在您每次绘制数据时不更改范围时才有用。
基本上,您在后墙上绘制一个与 xy 平面中网格线的线型、数量和位置相匹配的恒定曲面。
首先,设置范围。我给它们贴上了标签,因为我们稍后会需要这些数字。
xmin=0 ; xmax = 100
ymin=0.01 ; ymax=1000
zmin=0 ; zmax=990
set xrange [xmin:xmax]
set yrange [ymin:ymax]
set zrange [zmin:zmax]
设置 z 轴与 xy 平面 (ticslevel) 的交点,我猜到了一个视角以在视觉上与您的示例相匹配。我们想在之前设置这些multiplot
。
set ticslevel 0.0
set view 60,45,1
现在是乐趣。对于这一部分,您必须知道 xy 平面中的网格线数(与 x 和 y 轴上的主要抽动数相同)。我们将首先绘制后网格墙,因此它们最后位于您的数据/函数后面。另外,我关闭了这部分的网格和边框,但如果你把它们留在里面,它们应该完全重叠。
set multiplot
unset grid
set border 0
即使 y 轴具有对数刻度,网格也是线性分离的(等距网格线)。所以此时我想要y轴上的线性比例。(如果您set logscale y
在此之前,请将其注释掉。)我不想要 y 轴上的线性标签,因为它们在对数刻度上是不同的,所以我相应地设置了格式。
set format y ""
set isosamples 6,9 # - set this to number of tics on y-axis,z-axis
这是在不同范围内绘图时唯一可能更改的手动设置。您需要将数字设置为isosamples
y 轴、z 轴上的抽动数。
为了控制 gnuplot 将为每个表面使用多少行,我们需要设置 isosamples(在上面完成)和虚拟变量的范围u,v
。注意线类型 0,它是网格线类型。我在 x = xmin 处绘制我的第一面墙:
set parametric
set urange [ymax:ymin]
set vrange [zmax:zmin]
splot xmin,u,v w lines lt 0
同样,我们在 y = ymax 处做另一面墙。
set urange [xmin:xmax]
set vrange [zmin:zmax]
splot u,ymax,v w lines lt 0
unset parametric
现在我有了墙,我可以绘制图片中已有的内容。设置边框,抽动,重新启用我们之前禁用的 y 轴标签,设置 y 轴上的对数刻度(现在是个好时机)并将 isosamples 重置为默认值。
set xtics mirror
set ytics mirror
set ztics mirror
set grid ytics xtics back
set logscale y
set format y " %g"
set isosamples 10,10
并按照您的习惯绘制数据/功能。
splot 'data.txt' w lines
unset multiplot
我们完成了......
可能的必要修改:
我猜你的 x 和 y 轴与我的不同,因为相反的东西很容易通过view 60,135,1
. 不过,这也会切换 x 和 y。然后,您的表面将更改坐标。
您可以尝试使用和在那里设置抽动。这是Xtics的文档。x2tics
y2tics