如果您没有将samples和 都设置isosamples为适当的值,则由 gnuplot 生成的等高线可能看起来非常奇怪(意外)。我花了几个小时努力找出如何准确地set samples影响set isosamples轮廓线的外观,但是,我观察到的只是将两者设置为足够大的值将生成漂亮的轮廓。不过,我想了解它到底是如何工作的。
set samples和之间有什么区别?set isosamplesset samples影响轮廓线的生成?set isosamples影响轮廓线的生成?例如,考虑以下简单情况:
unset surface
set contour
set cntrparam levels discrete 10, 20
set samples 250, 2
set isosamples 2, 250
set view map
splot x**2 + y**2
Run Code Online (Sandbox Code Playgroud)
要生成正确的轮廓线,您似乎需要将 的第一个参数samples和第二个参数设置isosamples为足够大的值。然而,将 的第二个参数samples和 的第一个参数设置isosamples为尽可能小的值并没有什么坏处。这并不完全直观。那么这是如何运作的呢?
首先,讨论设计的目的samples和isosamples地点。当查看实际绘图而不是等高线图时,这是最好的。
samples用于设置沿绘制范围内的轴进行函数计算的数量。对于splot(3D 图像),您可以在独立的 x 和 y 方向上控制样本。下面是一个示例,其中 x 方向只有 4 个评估,y 方向有 200 个评估:
reset
set xrange [-10:10]
set yrange [-10:10]
set xlabel 'X'
set ylabel 'Y'
set samples 4,200
splot x**2+y**2
Run Code Online (Sandbox Code Playgroud)
在下面的 2 个图像中,请注意,沿 x 方向,函数仅计算 4 次,并且在它们之间绘制直线。沿着 y 方向,它被评估 200 次,它看起来像“平滑”曲线。请注意,在两个方向上,正好绘制了 10 条线。我将在下面讨论等值线时讨论这一点。
因此,每个轴方向绘制 10 条线,因为 x 和 y 方向等值线的默认值为 10。我们可以随意更改此值。让我们在两个方向上增加样本以获得漂亮的平滑曲线,但演示等样本。
reset
set xrange [-10:10]
set yrange [-10:10]
set xlabel 'X'
set ylabel 'Y'
set samples 200,200
set isosamples 4,12
splot x**2+y**2
Run Code Online (Sandbox Code Playgroud)
请注意两个方向上漂亮的平滑曲线。沿 x 轴,只有 4 个点,沿 y 轴,绘制曲面曲线;沿 y 轴,有 12 个点,平行于 x 轴绘制曲面曲线。
set samples上面的例子展示了和的主要目的set isosamples。它们仅间接影响轮廓。在您的情况下,您只对等高线图感兴趣,甚至不显示曲面图。关于 gnuplot 如何绘制轮廓的线索在于它对如何使用离散数据绘制轮廓的解释。
格罗马克:
为了绘制轮廓,数据应组织为“网格数据”。在这样的文件中,列出单个 y 等值线的所有点,然后列出下一个 y 等值线的所有点,依此类推。单个空行(除了空格和回车符和/或换行符之外不包含任何字符的行)将一个 y 等值线与下一个等值线分隔开。
从这个解释来看,gnuplot 似乎更喜欢选择 x 值并绘制 y 等值线。我们可以推断,当 gnuplot 从函数绘制轮廓时,它会选择 x 值并绘制 y 等值线。因此,拥有许多 x 样本和许多 y 等值线可以绘制高分辨率轮廓,而 y 样本和 x 等值线则无关(如果您不绘制表面)。