在 MATLAB 中绘制函数的等距高度线
Draw evenly-spaced height lines of a function in MATLAB
我想用 MATLAB 绘制函数的高度线(当然是用矩阵表示)。
我熟悉等高线,但等高线在均匀间隔的高度绘制线条,而我希望看到绘制时彼此保持恒定距离的线条(带有高度标签)。
这意味着如果一个函数在一个区域快速增长,我将不会得到一个高度线密集的图,而只会得到几条线,间距均匀。
我试图在轮廓帮助页面中找到这样的选项,但什么也找不到。有内置函数吗?
你可以做的一件事是,不是在等间距水平绘制等高线(这是将整数传递给等高线时发生的情况),而是在数据的固定 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')
结果:
对于右图,大部分图像的线条间距大致相等。请注意,间距只是近似相等,不可能在整个图像上获得相等的间距,除非在一些微不足道的情况下。
没有内置函数可以执行此操作(据我所知)。您必须意识到,在一般情况下,您不能拥有既代表等值又以固定距离隔开的线。这仅适用于具有特殊缩放属性的图,而且,这不是一般情况。
话虽如此,您可以想象通过使用指定绘图级别的语法来接近您想要的绘图:
...
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
结果可能不如您预期的那么好,但这是我能想到的最好的结果,因为您的要求再次不可能。
最佳,
我想用 MATLAB 绘制函数的高度线(当然是用矩阵表示)。
我熟悉等高线,但等高线在均匀间隔的高度绘制线条,而我希望看到绘制时彼此保持恒定距离的线条(带有高度标签)。
这意味着如果一个函数在一个区域快速增长,我将不会得到一个高度线密集的图,而只会得到几条线,间距均匀。
我试图在轮廓帮助页面中找到这样的选项,但什么也找不到。有内置函数吗?
你可以做的一件事是,不是在等间距水平绘制等高线(这是将整数传递给等高线时发生的情况),而是在数据的固定 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')
结果:
对于右图,大部分图像的线条间距大致相等。请注意,间距只是近似相等,不可能在整个图像上获得相等的间距,除非在一些微不足道的情况下。
没有内置函数可以执行此操作(据我所知)。您必须意识到,在一般情况下,您不能拥有既代表等值又以固定距离隔开的线。这仅适用于具有特殊缩放属性的图,而且,这不是一般情况。
话虽如此,您可以想象通过使用指定绘图级别的语法来接近您想要的绘图:
...
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
结果可能不如您预期的那么好,但这是我能想到的最好的结果,因为您的要求再次不可能。
最佳,