Matlab

时间:2016-08-19 13:05:59

标签: matlab matlab-figure contour

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

我有几个2D矩阵(含有NaN),我想在 Matlab 中绘制一个 iso- /等高线。为此,我使用实现的contour()函数,其中Matlab自动选择轮廓线的级别,我只指定要显示的级别数:

Contourline=contour(MyData,1);

结果看起来很好,但我现在想知道如何选择我的轮廓线的确切高度如果高度在不同矩阵之间是可比较的,意思是他们总是在例如50%的最大值?

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

修改
我的问题针对的是当level级数设置为1时在contour()函数中实现的基础算法。这为我的数据产生了非常好的结果,这意味着函数绘制一条线(或者如果高度相同则更多)有点捕获我的数据中的分布(Image)。如果我尝试手动设置高度contour(myData,[X X])这可行,但与自动模式相比,我的所有矩阵都不适用,因为我只指定了级别contour(myData,1)。所以我对这些结果非常满意,但是如果有人问我如何分析我的数据,我想给他们一个更加数学上合理的答案而不仅仅是:“我在这个程序中选择了这个功能”。

一般来说:
我想知道如何为自动模式选择该高度,并且如果代码中可能存在一部分,则不希望比较不同矩阵的轮廓线。 documentation仅表示高度是自动设置的,但不完全是如何设置。

1 个答案:

答案 0 :(得分:1)

您可以使用矢量指定绘制轮廓的高度

class MyBank(object):
    crisis = False

    def bankrupt(self) :
        self.crisis = True

bankX = MyBank()
bankY = MyBank()
bankX.bankrupt()
print "bankX's crisis: ",bankX.crisis
print "bankY's crisis: ",bankY.crisis

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

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

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

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

您还可以使用[c, h] = contour(data, 1); levels = get(h, 'LevelList') 属性在创建后修改关卡的高度。

LevelList

<强>更新

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

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

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

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