您可以通过以下方式获得类似的外观:
- 设置'EdgeColor'财产 https://www.mathworks.com/help/matlab/ref/matlab.graphics.chart.primitive.surface-properties.html#property_d119e930164表面物体的
'none'
去除边缘着色。
- 修改'CData'财产 https://www.mathworks.com/help/matlab/ref/matlab.graphics.chart.primitive.surface-properties.html#property_d119e931462的表面来模仿颜色数据的对数缩放 http://matplotlib.sourceforge.net/api/colors_api.html#matplotlib.colors.LogNorm在Python代码中。
以下是修改代码的方法:
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, Y, Z, C, 'EdgeColor', 'none');
colormap jet
这是结果图:
对数缩放如何工作...
对数尺度Z
用于生成颜色数据的数据C
使更多表面点使用喷射颜色贴图的红橙色范围,从而提高该特定表面的对比度。可以通过这个简单的示例来直观地了解其工作方式:
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, Y, Z, C, 'EdgeColor', 'none');
colormap jet
caxis([1 numel(index)]);
这通常应该比C = Z
默认表面颜色。