gpt4 book ai didi

gnuplot - 如何在 3d 绘图的顶部边界放置刻度线?

转载 作者:行者123 更新时间:2023-12-02 02:09:41 28 4
gpt4 key购买 nike

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

enter image description here

最佳答案

我还没有找到使用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 将对每个表面使用多少行,我们需要设置等值样本(在上面完成)和虚拟变量 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 轴上设置对数刻度(现在是个好时机)并将等样本重置为默认值。

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。然后,您的表面将改变坐标。

关于gnuplot - 如何在 3d 绘图的顶部边界放置刻度线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13458688/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com