样本、等值样本以及它们如何影响等高线

Samples, isosamples, and how they affect contour lines

如果您没有将 samplesisosamples 都设置为适当的值,gnuplot 生成的等高线可能看起来很奇怪(意外)。我花了好几个小时才弄清楚 set samplesset isosamples 到底是如何影响等高线的外观的,但是,我观察到的是将两者都设置为足够大的值会产生好看的等高线。尽管如此,我还是想了解它到底是如何工作的。

  1. set samplesset isosamples 在等高线上下文中有什么区别?
  2. set samples如何影响轮廓线的生成?
  3. 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

要生成正确的轮廓线,您似乎需要将 samples 的第一个参数和 isosamples 的第二个参数设置为足够大的值。但是,将 samples 的第二个参数和 isosamples 的第一个参数设置为尽可能小的值并没有坏处。这并不完全直观。那么这是如何工作的?

首先,讨论 samplesisosamples 的设计目的。这在查看实际图而不是等高线图时最好。

samples 用于设置绘制范围内沿轴的函数计算次数。对于 splot(3-D 图像),您可以在独立方向 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

在下面的 2 张图片中,请注意,沿着 x 方向,函数只计算了 4 次,并且在它们之间绘制了直线。沿 y 方向计算 200 次,看起来像 'smooth' 条曲线。请注意,在两个方向上,恰好绘制了 10 条线。我将在下面讨论等值线时谈到这一点。

看向x轴:

看向y轴:


因此,每个轴方向绘制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

注意两个方向上漂亮的平滑曲线。沿 x 轴,只有 4 个点,沿 y 轴,绘制曲面曲线,沿 y 轴,有 12 个点,曲面曲线平行于 x 轴绘制。


以上示例演示了 set samplesset isosamples 的主要目的。它们只会间接影响轮廓。在您的情况下,您只对等高线图感兴趣,甚至不显示曲面图。关于 gnuplot 如何绘制等高线的线索在其对如何使用离散数据绘制等高线的解释中。

Gromacs:

In order to draw contours, the data should be organized as "grid data". In such a file all the points for a single y-isoline are listed, then all the points for the next y-isoline, and so on. A single blank line (a line containing no characters other than blank spaces and a carriage return and/or a line feed) separates one y-isoline from the next.

从这个解释来看,gnuplot 似乎更喜欢选择一个 x 值并绘制一条 y 等值线。我们可以推断出,当 gnuplot 从函数绘制等高线时,它会选择 x 值并绘制 y 等值线。因此,具有许多 x 样本和许多 y 等值线绘制高分辨率等高线,而 y 样本和 x 等值线是无关紧要的(如果您不绘制表面)。