【问题标题】:Draw evenly-spaced height lines of a function in MATLAB在 MATLAB 中绘制函数的等距高度线
【发布时间】:2015-07-11 17:47:09
【问题描述】:

我想使用 MATLAB 绘制函数(当然是用矩阵表示)的高度线。

我对等高线很熟悉,但等高线在等高处绘制线条,而我希望看到线条(带有高度标签),在绘制时彼此保持恒定距离。

这意味着如果一个函数在一个区域快速增长,我将不会得到一个高度线密集的图,而是只有几条线,且间距均匀。

我试图在轮廓帮助页面中找到这样的选项,但什么也看不到。有没有内置函数可以做到这一点?

【问题讨论】:

    标签: matlab plot contour


    【解决方案1】:

    没有内置函数可以做到这一点(据我所知)。您必须意识到,在一般情况下,您不能有既代表等值又以固定距离间隔开的线。这仅适用于具有特殊缩放属性的绘图,而且这不是一般情况。

    话虽如此,您可以想象通过使用指定绘图级别的语法来接近您想要的绘图:

    ...
    contour(Z,v) draws a contour plot of matrix Z with contour lines at the data values specified in the monotonically increasing vector v.
    ...
    

    所以你所需要的只是高度值的良好向量v。为此,我们可以采用经典的 Matlab 示例:

    [X,Y,Z] = peaks;
    contour(X,Y,Z,10);
    axis equal
    colorbar
    

    并将其转换为:

    [X,Y,Z] = peaks;
    [~, I] = sort(Z(:));
    v = Z(I(round(linspace(1, numel(Z),10))));
    contour(X,Y,Z,v);
    axis equal
    colorbar
    

    结果可能不如您预期的那么好,但这是我能想到的最好的结果,因为您再次提出的问题是不可能的。

    最好的,

    【讨论】:

      【解决方案2】:

      您可以做的一件事是,不要在等间距级别绘制等高线(当您将整数传递给等高线时会发生这种情况),而是在数据的固定percentiles 上绘制等高线(这需要通过水平到轮廓的向量):

      Z = peaks(100);  % generate some pretty data
      nlevel = 30;
      
      subplot(121)
      contour(Z, nlevel)  % spaced equally between min(Z(:)) and max(Z(:))
      title('Contours at fixed height')
      
      subplot(122)
      levels = prctile(Z(:), linspace(0, 100, nlevel));
      contour(Z, levels);  % at given levels
      title('Contours at fixed percentiles')
      

      结果:

      对于右图,大部分图像的线条间距大致相等。请注意,间距只是近似相等,不可能在整个图像上获得相等的间距,除非在一些微不足道的情况下。

      【讨论】:

      • 和我的答案差不多。 +1
      • @Ratbert 是的,差不多。英雄所见略同 :)。我刚刚设法比你早 20 秒发帖,因为我用谷歌搜索了“Matlab 百分位数”,而不是手动排序......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多