您可以通过以下方式实现类似的外观
以下是修改代码的方法:
s = .05;
x = [-2:s:2+s];
y = [-1:s:3+s];
[X,Y] = meshgrid(x,y);
Z = (1.-X).^2 + 100.*(Y-X.*X).^2;
minZ = min(Z(:)); % Find minimum value of Z
maxZ = max(Z(:)); % Find maximum value of Z
C = minZ+(maxZ-minZ).*log(1+Z-minZ)./log(1+maxZ-minZ); % Create a log-scaled
% set of color data
surf(X,C,'EdgeColor','none');
colormap jet
这是由此产生的情节:
对数缩放如何工作……
用于产生颜色数据C的对数缩放的Z数据使得喷射颜色图的红橙色范围被更多的表面点使用,从而改善了该特定表面的对比度.通过这个简单的例子可以看到它的工作方式:
x = 0:5:100; % Create a range of values from 0 to 100
plot(x,x,'b-*'); % Plot the values as a straight line (y = x) in blue
hold on; % Add to the plot
plot(x,100.*log(1+x)./log(101),'r-*'); % Plot a log-scaled version of x in red
colorbar % Display the default jet color map,for comparison
原始蓝点均匀分布在右侧颜色条中对应的颜色范围内.对数缩放时,这些点向上移动到红线.请注意,这会导致较低的蓝绿色范围内的点密度降低,以及红橙色范围内的点密度增加.
一般情况下获得更好的对比
对于此处使用的特定曲面,颜色数据的对数缩放有助于在曲面上的所有点上使用更大范围的颜色映射.由于在较低高度(即颜色指数)值处存在许多点,因此对数比例将这些低点扩展得更多以在表面的大槽中使用更宽范围的颜色.
但是,如果要通过更好地使用颜色贴图的范围来改善任意曲面的对比度,则日志缩放并不总是有效.可能更好的一般解决方案是按升序对表面的所有高度值进行排序,然后将这些值映射到跨越整个颜色映射的线性范围.如果您为上述表面执行此操作,您将获得以下内容:
C = Z;
[~,index] = sort(C(:));
C(index) = 1:numel(index);
h = surf(X,'none');
colormap jet
caxis([1 numel(index)]);
这通常应该提供比C = Z默认表面着色更好的对比度.