python – 如何用更强的对比度为表面着色

python – 如何用更强的对比度为表面着色,第1张

概述在Matlab中,我试图用以下代码在2维欧几里德空间上绘制函数 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;surf(X,Y,Z)colormap jet 这是我的情节: 我希望用更强的对比度表面着色,就像Wikipedia所示 Wikipedia中的绘图是使用P 在Matlab中,我试图用以下代码在2维欧几里德空间上绘制函数
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;surf(X,Y,Z)colormap jet

这是我的情节:

我希望用更强的对比度为表面着色,就像Wikipedia所示

Wikipedia中的绘图是使用Python代码绘制的:

from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfrom matplotlib.colors import Lognormimport matplotlib.pyplot as pltimport numpy as npfig = plt.figure()ax = Axes3D(fig,azim = -128,elev = 43)s = .05X = np.arange(-2,2.+s,s)Y = np.arange(-1,3.+s,s)X,Y = np.meshgrID(X,Y)Z = (1.-X)**2 + 100.*(Y-X*X)**2ax.plot_surface(X,Z,rstrIDe = 1,cstrIDe = 1,norm = Lognorm(),cmap = cm.jet)plt.xlabel("x")plt.ylabel("y")plt.show()

我的Matlab代码和维基百科Python代码似乎都使用“jet”作为colormap,但它们的高度值与颜色的实际映射是不同的.所以我想知道如何在Matlab中获得类似的着色?

感谢致敬!

解决方法 您可以通过以下方式实现类似的外观

>将曲面对象的'EdgeColor' property设置为“无”以删除边缘着色.
>修改曲面的'CData' property以模仿Python代码中的log-scaling of the color data.

以下是修改代码的方法:

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 ZmaxZ = max(Z(:));  % Find maximum value of ZC = minZ+(maxZ-minZ).*log(1+Z-minZ)./log(1+maxZ-minZ);  % Create a log-scaled                                                        %   set of color datasurf(X,C,'Edgecolor','none');colormap jet

这是由此产生的情节:

对数缩放如何工作……

用于产生颜色数据C的对数缩放的Z数据使得喷射颜色图的红橙色范围被更多的表面点使用,从而改善了该特定表面的对比度.通过这个简单的例子可以看到它的工作方式:

x = 0:5:100;        % Create a range of values from 0 to 100plot(x,x,'b-*');  % Plot the values as a straight line (y = x) in bluehold on;            % Add to the plotplot(x,100.*log(1+x)./log(101),'r-*');  % Plot a log-scaled version of x in redcolorbar            % display the default jet color map,for comparison

原始蓝点均匀分布在右侧颜色条中对应的颜色范围内.对数缩放时,这些点向上移动到红线.请注意,这会导致较低的蓝绿色范围内的点密度降低,以及红橙色范围内的点密度增加.

一般情况下获得更好的对比

对于此处使用的特定曲面,颜色数据的对数缩放有助于在曲面上的所有点上使用更大范围的颜色映射.由于在较低高度(即颜色指数)值处存在许多点,因此对数比例将这些低点扩展得更多以在表面的大槽中使用更宽范围的颜色.

但是,如果要通过更好地使用颜色贴图的范围来改善任意曲面的对比度,则日志缩放并不总是有效.可能更好的一般解决方案是按升序对表面的所有高度值进行排序,然后将这些值映射到跨越整个颜色映射的线性范围.如果您为上述表面执行此 *** 作,您将获得以下内容:

C = Z;[~,index] = sort(C(:));C(index) = 1:numel(index);h = surf(X,'none');colormap jetcaxis([1 numel(index)]);

这通常应该提供比C = Z默认表面着色更好的对比度.

总结

以上是内存溢出为你收集整理的python – 如何用更强的对比度为表面着色全部内容,希望文章能够帮你解决python – 如何用更强的对比度为表面着色所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存