Matlab等高线数据的等高线图

时间:2019-10-02 16:23:33

标签: matlab contour

在Matlab中,如何从轮廓数据(例如由countourc生成的轮廓数据)生成轮廓图? contour在内部使用contourc将高程数据转换为轮廓数据;但是从文档中并不清楚我如何能够直接直接提供轮廓数据。

2 个答案:

答案 0 :(得分:1)

如果您使用的是旧版本的MATLAB,请尝试

[C,h] = contour(peaks(30),-8:2:8);
h1 = get(h,'children');
X = get(h1,'xdata');
Y = get(h1,'ydata');
hold on
plot(X{5},Y{5},'.r')
hold off

这是2014年及以后的版本

[C,h] = contour(peaks(30),-8:2:8);
i = 1;
slev = 4;                           % draw specific level
hold on
while i < size(C,2)
    ncnt = C(2,i);                  % number of points for current contour
    if abs(C(1,i) - slev) < 0.01    % check if it's desired contour
        icnt = i+(1:ncnt);
        plot(C(1,icnt), C(2,icnt), '.r')
        break;
    end
    i = i + ncnt + 1;               % next contour
end
hold off

答案 1 :(得分:1)

如果轮廓线很多,并且要绘制具有相同线属性的所有曲线,则可以使用以下功能:

function h = contourC(C, varargin)
i = 1;
D = [C.' zeros(size(C, 2), 1)];
while (i < size(C,2))
    lvlv = C(1, i);                 % level value
    ncnt = C(2, i);                 % number of points for current contour
    D(i:i+ncnt, 3) = lvlv;
    D(i, :) = NaN;
    i = i + ncnt + 1;               % next contour
end
h = plot3(D(:, 1), D(:, 2), D(:, 3), varargin{:});
end

解析ContourMatrixC)是从shade的答案中借用的,但是由于它只调用一次plot / plot3,因此对我的数据执行速度要快30倍。 此函数将每条曲线绘制在其实际水平上,但是,您可以省略D(:, 3)并调用plot以获得平坦轮廓。像这样使用:

C = contourc(data, ...);
h = contourC(C, '-k', 'linewidth', 1);