3

我在 Gnuplot 中制作了一些 3D 曲面图,在我的图的每个边界上都有 tic 标记会非常有用。在随附的示例图中,左上角或右上角水平边界(边界 256 和 512)上没有 tic 标记。为了在后面的垂直平面上绘制垂直网格线,我需要在这些边框上有 tic 标记。我怎样才能做到这一点?

在此处输入图像描述

4

2 回答 2

2

我还没有找到使用gridand解决这个问题的方法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

这是在不同范围内绘图时唯一可能更改的手动设置。您需要将数字设置为isosamplesy 轴、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。然后,您的表面将更改坐标。

于 2012-12-07T11:12:39.957 回答
0

您可以尝试使用和在那里设置抽动。这是Xtics的文档。x2ticsy2tics

于 2012-12-01T23:56:57.390 回答