【问题标题】:How do I place tic marks along the top borders in a 3d plot?如何在 3d 图中沿顶部边界放置 tic 标记?
【发布时间】:2012-12-07 19:12:39
【问题描述】:

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

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    我还没有找到使用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。然后你的表面会改变坐标。

    【讨论】:

    • 哇,感谢您的详细回答!当我有机会尝试时,我会回复你。看起来很有希望......
    • 没问题。我很高兴解决这个问题。我学到了更多关于 3D 绘图的知识,它非常简洁,实际上......我通常坚持使用 2D......
    • 我只是想再次感谢您提供此解决方案。我实现它没有问题,除了我通常有一个反向视图,所以不得不改变一些 x,y 限制。那里有垂直网格线真的让我的一些情节更容易阅读和更有意义!
    • @jt_04:不要忘记为有用的答案投票并接受回答您问题的答案。
    【解决方案2】:

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

    【讨论】:

    • 不幸的是,这对我不起作用(是的,我在发布之前确实尝试过这个选项)。据我所知,x2 和 y2 都在 3d 图的底部平面上。我想在顶部的水平边框上设置抽动。我尝试过诸如“set xtics 256 mirror...”之类的命令,其中 256 指的是“左上角”边框,但这不起作用。我也尝试过 512、1024 和 2048,它们都是顶部水平边框。这些选项都不会导致顶部周围出现记号。
    • 你有没有考虑过这可能是……不可能的:)
    • 啊!可怕的念头闪过我的脑海,但后来我想“这是 gnuplot!它可以做任何事情!”。也许不是。也许我应该弄清楚如何提交错误/功能请求。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2012-07-31
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多