2016-08-19 107 views
0

我不知道这是否是我的问题的确切位置,但据我了解FAQ正确,可以从一种特定语言提出有关特定软件算法的问题。Matlab中自动轮廓线的高度

我有几个2D矩阵(含有NaN的),用于我想要绘制一个异/轮廓线在Matlab的。为此,我使用实施轮廓()函数以下列方式,在Matlab的自动选择等高线的水平,只说明我想要显示的级别数:

Contourline=contour(MyData,1); 

结果看起来很不错,但我现在想知道如何选择我的轮廓线的确切高度,并且如果高度在不同的矩阵之间是可比较的,那么它们的含义总是在例如最大值的50%?

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

编辑:
我的问题的目的是在当等级的数量设置为1,这将产生非常好的结果我的数据,这意味着功能的轮廓()函数实现的基本算法画一条线(或更高,如果高度相同)哪些有点捕捉我的数据分布(Image)。如果我尝试手动设置高度contour(myData,[X X])这可行,但不适用于所有我的矩阵,与自动模式相反,当我仅指定级别数contour(myData,1)时。所以我对这些结果很满意,但是如果有人问我如何分析我的数据,我想给他们一个更具数学意义的答案,而不仅仅是:“我在这个程序中选择了这个功能”。

一般来说:
我想知道这个高度是如何选择用于自动模式,并且如果有可能是在代码的一部分,这使得它不希望为不同的矩阵的轮廓线进行比较。 documentation只说明高度是自动设置的,但不完全如此。

回答

1

您可以使用向量来指定在什么高度画出轮廓

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

如果你只需要一个高度,如果你只想指定只提供值的两倍

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

要绘制的层数(而不是高度),可以使用图形对象的LevelList property来确定绘制线条的高度。您可以使用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); 
+0

感谢您的及时回复。我已经尝试手动设置高度(请参阅我的问题的第二部分),但我的问题是针对contour()函数的基础算法而不是实现(对不起,如果我的原始问题不够清楚)。我会编辑我原来的帖子,使其更清楚我的问题是什么。 –

+0

@ C.B。添加了一个更新部分,显示了MATLAB如何自动选择关卡。 – Suever