如何在3d绘图中沿顶部边框放置刻度线?

时间:2012-11-19 17:06:20

标签: gnuplot

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

enter image description here

2 个答案:

答案 0 :(得分:2)

我找不到使用gridborder解决此问题的方法。但是,有一个相对简单的解决方法,只有在每次绘制数据时都不更改范围时才有用。

基本上,您在后墙上绘制一个与X-y平面中的线条类型以及网格线的数量和位置相匹配的恒定曲面。

首先,设置范围。我给它们贴了标签,因为我们以后会需要这些数字。

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轴与x-y平面(ticslevel)的交点,并且我猜测了一个视角,以便在视觉上匹配您的示例。我们希望在multiplot之前设置这些。

set ticslevel 0.0
set view 60,45,1

现在很有趣。对于此部分,您必须知道x-y平面中网格线的数量(与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。然后,您的曲面将改变坐标。

答案 1 :(得分:0)

您可以使用x2ticsy2tics尝试设置抽搐。 以下是 Xtics 的文档。