- 积分
- 16930
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-9-28
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 灰色节能君 于 2020-7-29 17:18 编辑
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才能控制显示范围得到上图的效果呢?
|
|