【问题标题】:Showing an organised top down view of a 3D function in Maxima在 Maxima 中显示 3D 函数的组织自上而下视图
【发布时间】:2021-02-26 01:38:45
【问题描述】:

我在数学网站上问过,被告知在这里问这个。

我正在尝试使用 Maxima 显示 3D 函数的自上而下视图,函数的不同值(高度/深度)将使用 Maxima 自动提供的一系列颜色和颜色条显示。

使用this website,我能够为函数的自上而下视图整理一些代码(我决定省略之前的代码,因为它只是 load(draw)$ 和函数本身):

wxdraw3d(
enhanced3d=true, explicit(f(y,x,15,400,1),y,0,100,x,20,30),
xu_grid=100, yv_grid=100,
xyplane=0,
view=[0,0],
zrange=[0,50],
zlabel="Gap distance (m)",
xlabel="Gap number",
ylabel="Initial velocity (ms^{-1})",
title="f(n,u,15,400,1)"
);

这给出了以下情节:

如您所见,情节有几个问题:

  • 彩条没有标签,将使用当前的 z-label
  • 垂直轴(标签、数字和细分)应位于左侧
  • 横轴的细分应该在底部
  • 绘图上的所有细分都应显示在上方而不是下方
  • 应调整边框的大小,以免被截断或重叠(指的是输出周围的黑色边框,图像是边框内的裁剪)

我尝试了this website 的另一种方法,使用最底部的 gnuplot 代码来提供修改后的代码:

plot3d(
f(x,y,15,400,1),[x,0,100],[y,20,30],
[elevation,0],
[grid,100,100],
[zlabel,"Gap length (m)"],
[xlabel,"Gap number"],
[ylabel,"Initial velocity (ms^{-1})"],
[gnuplot_preamble,"set view map; unset surface"],
[gnuplot_pm3d,true]
);

但是,这并没有奏效,因为它给出了this plot。正如你所看到的,这比第一个情节有更多的问题。不仅不如第一张图那么清晰,和网站上的图差不多,信息少,没有彩条,没有编号轴,网格很烦人,甚至颜色渐变更差。

对于我使用的第一个代码,我找不到任何关于标记颜色条的信息,只有范围、颜色本身以及它是打开还是关闭;而且我在边框大小或轴标签的位置等方面找不到任何东西。所以尝试使用此代码没有意义,特别是如果我让第一个代码正常工作。根据绘图的大小,我尝试了 wxplot_size[],但是给出了错误“draw: unknown option [600,400]”,它似乎四舍五入到最接近的一百。

有没有办法修改第一个代码,使颜色条被标记,垂直轴标记在另一侧,每个轴的小细分出现在图上,图外没有任何东西被切断或重叠?如果无法将细分移动到情节上方,是否有办法移除它们?我对 Maxima 或 gnuplot 了解不多。

除了这些问题外,其他一切似乎都很好,我不完全确定还有什么地方可以询问有关 Maxima 的问题。

【问题讨论】:

  • 我真的没有答案。我用contour_plot 做了一些实验,到目前为止我得到的最接近的是contour_plot (<some fcn of u and v>, [u, -4, 4], [v, -4, 4], [legend, false], [xlabel, "My X label"], [ylabel, "My Y label"], [gnuplot_preamble, "set pm3d"]);,它没有彩条,也许还有你想要的其他东西。您可以尝试 Maxima 邮件列表以获取更多想法。见:sourceforge.net/projects/maxima/lists/maxima-discuss
  • 其实你的3D功能是什么?你能解释一下f(x,y,15,400,1),[x,0,100],[y,20,30]吗?您使用哪个 gnuplot 版本?
  • 至于 gnuplot,实际上我昨天才更新它,因为我不确定我使用的是什么版本,所以我更新到 5.4.1,这是我用于这些屏幕截图的版本
  • 函数,就变量而言,是 ut+(t²(v²-u²)(n-½))/(2l)。 X是n变量,会有不同的图,每张图都用不同的变量作为y,所以我用的例子把u作为y。
  • @RobertDodier,我尝试了添加 z 范围和颜色条范围(否则将无法正常工作),并收到此错误消息:“来自 maxima 的 stderr 流的消息:警告:字体初始化缓慢qt_processTermEvent 收到GE_fontprops 事件。这不应该发生 ["C:/Users/harry/maxout6224.gnuplot"。除此之外,还有一些问题:函数等于 20(出于某种原因)的等高线,以及垂直轴和数字不在左侧(我不仅更喜欢它,它也被颜色条重叠)。

标签: plot 3d gnuplot maxima


【解决方案1】:

让我们修改wxdraw3d命令。

Maxima 编写了一个 gnuplot 输入文件,之后由 gnuplot 加载,因此您可以检查 maxima 命令的影响。在我的系统(Debian linux)上,该文件位于我的主目录中,名称类似于“~/maxout_28503.gnuplot”。

大部分问题都可以通过使用 gnuplot 命令set view map 而不是set view 0,0 来解决,对应于maxima 命令view=map 而不是view=[0,0]

我还没有找到设置颜色框标签的“好”方法。我认为有一种极大的方式,因为默认情况下生成的 gnuplot 文件包含set cblabel '' 行,它会生成一个空标签。但是我们可以使用该机制来应用任何 gnuplot 设置:user_preamble= ...

所以现在我们有以下内容:

wxdraw3d(
    user_preamble="set cblabel 'Gap distance (m)' offset screen 0.01, 0;",
    view=map,
    enhanced3d=true,
    title="f(n,u,15,400,1)",
    xlabel="Gap number",
    ylabel="Initial velocity (ms^{-1})",
    zlabel="",
    explicit(x^2+y^2,x,-2,2,y,-2,2)
);

user_preamble= 中编写的命令似乎在实际 gnuplot splot 命令之前执行。因此它们可以覆盖以前的设置。

命令set cblabel 设置颜色框的标签。我添加了一个小的偏移量以避免标签太靠近。

我懒得理解你的功能:)所以我又画了一个。

这是结果:


更新以改进您评论中的图片

Gnuplot 有时在估计文本大小时会出现问题。这可能导致丑陋的图表。您可以通过手动调整偏移量和大小来改善输出。

命令set size 更改整个图像中的绘图区域。这可用于为右侧的颜色框标签腾出一些空间。 set ylabel 命令接受offset。我们将这两个命令放入user_preamble 部分wxdraw3d

wxdraw3d(
    user_preamble=[
        "set cblabel 'Gap distance (m)' offset screen 0.01, 0",
        "set ylabel offset screen -0.01,0",
        "set size 0.9,1"
    ],
    view=map,
    enhanced3d=true,
    ...
);

使用所有的偏移量和大小数字,直到它们适合为止。

【讨论】:

  • 这是我得到的:i.stack.imgur.com/B2mZw.png;效果非常好,但有没有办法让它更宽,这样 y 轴标签和颜色条标签就不会重叠或切断?
  • @Harry 我不确定,但是,假设您正在使用 wxMaxima,菜单中是否有选项说您想要内联或在单独的窗口中绘制图像?也许尝试切换该选项,如果有的话。
  • 是的,我正在使用 wxMaxima。找不到关于内联的任何内容,我似乎可以通过删除 wxdraw3d() 的 wx 部分在新窗口中获取它。我尝试使用 y 轴标签上的偏移量,但我认为它只是离开了屏幕。
  • @Harry 请检查答案的更新。尝试小的偏移量。
  • @Harry 非常小的偏移量和小增量。
猜你喜欢
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多