Matlab中自动等高线的高度

Heights of automatic contour lines in Matlab

我不知道这是否是我的问题的确切站点,但据我正确理解 FAQ 可以从一种特定语言提出有关一种特定软件算法的问题。

我有几个二维矩阵(包含 NaN 的),我想在 Matlab 中为其绘制 一个 iso-/contour 行。为此,我按以下方式使用已实现的 contour() 函数,其中 Matlab 自动选择等高线的级别,我只指定要显示的级别数:

Contourline=contour(MyData,1);

结果看起来不错,但我现在想知道我的等高线的确切高度是如何选择的以及高度在不同矩阵之间是否具有可比性,意思是他们总是画在例如最大值的 50%?

contour() 函数还允许手动设置轮廓线的高度。这样做(通过将高度设置为我矩阵中最大值的 x %),结果看起来不像自动方法那样 fitting(不管 [= 的值如何46=]我选择)。
谢谢!

编辑:
我的问题针对的是当级别数设置为 1 时在 contour() 函数中实现的基础算法。这对我的数据产生了非常好的结果,这意味着该函数绘制了一条线(如果高度相同,则绘制更多线)有点捕捉到我数据中的分布 (Image)。如果我尝试手动设置高度 contour(myData,[X X]) 这有效,但与我仅指定级别数 contour(myData,1) 时的自动模式相比,不适用于我的所有矩阵。所以我对这些结果非常满意,但如果有人问我如何分析我的数据,我想给他们一个在数学上更合理的答案,而不仅仅是:"I chose this function in this program"。

总的来说:
我想知道如何为自动模式选择这个高度,以及代码中是否有一部分不希望比较不同矩阵的等高线。 documentation 仅说明高度是自动设置的,但未说明具体如何设置。

您可以使用向量来指定绘制等高线的高度

% Draws contours at height = 1 and 2
contour(data, [1 2])

如果您只需要一个高度,只需提供该值两次

% Contour at height 1
contour(data, [1 1])

如果您只想指定要绘制的层数(而不是高度),您可以使用图形对象的 LevelList property 来确定绘制线条的高度。

[c, h] = contour(data, 1);
levels = get(h, 'LevelList')

您还可以使用LevelList 属性修改创建后的关卡高度。

[c, h] = contour(data, 1);

% A level at 2
set(h, 'LevelList', 2);

% Or two levels
set(h, 'LevelList', [1 2])

更新

至于如何 MATLAB 在您指定级别数时选择级别,它使用以下公式在输入数据的最小值和最大值之间创建等距级别:

minimum = min(real(double(data(:)));
maximum = max(real(double(data(:)));

tmp = linspace(minimum, maximum, nLevels + 2);
levels = tmp(2:end-1);