在 Maxima

问题描述

我在数学网站上问过,有人告诉我在这里问这个问题。

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

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

wxdraw3d(
enhanced3d=true,explicit(f(y,x,15,400,1),y,100,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,1)"
);

给出以下情节:

Which gives the following plot

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

  • 颜色条没有标签,会使用当前的 z-label
  • 垂直轴(标签、数字和细分)应在左侧
  • 水平轴的细分应在底部
  • 地块上的所有细分都应出现在上方而不是下方
  • 应该调整边框的大小,以便没有任何内容被切断或重叠(指的是输出周围的黑色边框,图像是边框内部的裁剪)

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

plot3d(
f(x,[x,100],[y,30],[elevation,[grid,[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[],但这给出了错误“绘制:未知选项 [600,400]”,它似乎四舍五入到最接近的百位。

有什么方法可以修改一个代码,使得颜色条被标记,垂直轴标记在另一侧,每个轴的小细分出现在图上,图之外的任何东西都没有被切断还是重叠?如果不可能将细分移动到情节上方,无论如何要删除它们?我对 Maxima 或 gnuplot 不太了解。

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

解决方法

让我们修改 wxdraw3d 命令。

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

使用 gnuplot 命令 set view map 而不是 set view 0,0 可以解决大部分问题,对应于最大值命令 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)
);

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

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

我懒得理解你的函数 :) 所以我画了另一个。

结果如下:

result


更新以改善评论中的图片

result

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,"set size 0.9,1"
    ],...
);

使用所有偏移量和尺寸数字直到它们适合为止。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...