| 
 
	积分19509贡献 精华在线时间 小时注册时间2019-9-28最后登录1970-1-1 
 | 
 
| 
本帖最后由 灰色节能君 于 2020-7-29 17:18 编辑
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 import matplotlib.pyplot as plt
 import numpy as np
 x=np.arange(0,10.1,0.1)
 y=np.arange(0,10.1,0.1)
 X,Y=np.meshgrid(x,y)
 Z=X**2+Y**2
 ax=plt.contourf(X,Y,Z,100,cmap = 'jet')
 cbar=plt.colorbar()
 出图如下
 
   
 矩阵Z的最大值是200,最小值是0  假如现在想把colorbar的显示范围控制在20-100之间。看了网上的一些解决方法,比如
 把第三行设置成:
 ax=plt.contourf(X,Y,Z,100,cmap = 'jet',vmin=20,vmax=100)
 结果居然变成了这样:
 
   colorbar的显示范围并没有变,而且变得非常难看,仅仅把对应的颜色变掉了。我试了下不同contouf改用pcolor,相同的设置就却能达到我想要的结果,就是这样:
 import matplotlib.pyplot as plt
 import numpy as np
 x=np.arange(0,10.1,0.1)
 y=np.arange(0,10.1,0.1)
 X,Y=np.meshgrid(x,y)
 Z=X**2+Y**2
 ax=plt.pcolor(X,Y,Z,cmap = 'jet',vmin=20,vmax=100)
 cbar=plt.colorbar()
 
   上面这个图就是我想达到的理想效果,colorbar的显示范围被固定,大于100的值被归为最大值100,小于20的值被归为最小值20,这么做的目的
 就是为了能让多个子图共用一个colorbar,不致于同一个颜色在不同子图里对应不同的数值。但似乎想用contourf实现比较困难。
 还有的解决方案是设置levels,就是ax=plt.contourf(X,Y,Z,cmap = 'jet',levels=np.linspace(20,100,100))
 
   但是对于小于20,大于100的部分就不显示了,也不行。另外设置ax.set_clim(vmin=20,vmax=100)会得到和第二张图同样的结果,也不行。
 我用matlab很简单的得到了想要的结果
 x=0:0.1:10;
 y=0:0.1:10;
 [X,Y]=meshgrid(x,y);
 Z=X.^2+Y.^2;
 subplot(1,2,1)%原始图像
 f=contourf(X,Y,Z,100,'linestyle','none');
 colormap('jet')
 colorbar
 title('原始图像')
 
 subplot(1,2,2)%设置colorbar显示范围
 f=contourf(X,Y,Z,100,'linestyle','none');
 colormap('jet')
 colorbar
 caxis([20 100])
 title('设置colorbar显示范围')
 
   
 想请教各位前辈,python里应该怎么在contourf中设置colorbar才能控制显示范围得到上图的效果呢?
 
 
 
 
 | 
 |