从冲浪图中排除值

Excluding values from surf plot

假设我们有一个这样的 surf 情节:

A = round(peaks,0);
surf(A)

有没有办法修改颜色图,使其排除 A 中等于 0 的所有值,就好像它们是 NaN

在不影响色图其余部分的情况下将 0 着色为白色是另一种可接受的解决方案。

您提到了解决方案:将所有 0 设置为 nan:

A = round(peaks, 0);
A(A==0)=nan;  % in-place logical mask on zero entries
surf(A)
% The same, but with a temporary variable, thus not modifying A
B = A;
B(B==0) = nan;
surf(B)

(R2007a) 中的结果:

如果您不想修改 A 或使用临时变量,您需要在色图中“切一个洞”

A = round(peaks);

unique_vals = unique(A);  % Get the unique values
cmap = jet(numel(unique_vals));  % Set-up your colour map
zero_idx = find(unique_vals==0);  % find 0 index
cmap(zero_idx,:) = 1;  % all ones = white. Nan would make it black

surf(A, 'EdgeColor', 'none')
colormap(cmap)  % Use our colour map with hole

注意:'EdgeColor', 'none' 对用于删除每个补丁的边缘,这样您就不会看到值为 0 的“网格”。