爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 17121|回复: 5

[求助] contourf的colorbar如何设置显示范围?

[复制链接]

新浪微博达人勋

发表于 2020-7-29 17:12:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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()
出图如下
1.png

矩阵Z的最大值是200,最小值是0  假如现在想把colorbar的显示范围控制在20-100之间。看了网上的一些解决方法,比如
把第三行设置成:
ax=plt.contourf(X,Y,Z,100,cmap = 'jet',vmin=20,vmax=100)
结果居然变成了这样:
2.png
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()
3.png
上面这个图就是我想达到的理想效果,colorbar的显示范围被固定,大于100的值被归为最大值100,小于20的值被归为最小值20,这么做的目的
就是为了能让多个子图共用一个colorbar,不致于同一个颜色在不同子图里对应不同的数值。但似乎想用contourf实现比较困难。
还有的解决方案是设置levels,就是ax=plt.contourf(X,Y,Z,cmap = 'jet',levels=np.linspace(20,100,100))
4.png
但是对于小于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显示范围')
6.png

想请教各位前辈,python里应该怎么在contourf中设置colorbar才能控制显示范围得到上图的效果呢?



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-7-29 17:33:02 | 显示全部楼层
我是个萌新,但我猜你想要达到 只显示固定范围的填色,范围之外的用闭区间对应的颜色填充对吧?

如果是画二维要素场,只需用contourf()里的 levels 配合 extend 参数。或者试下试试colorbar里的 extend 参数
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-29 17:52:30 | 显示全部楼层
Asofhknok 发表于 2020-7-29 17:33
我是个萌新,但我猜你想要达到 只显示固定范围的填色,范围之外的用闭区间对应的颜色填充对吧?

如果是 ...

一语点破
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-5 08:53:40 | 显示全部楼层
最近遇到了同样的问题,extend参数是如何设置的呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-8-5 16:11:27 | 显示全部楼层
史文浩 发表于 2020-8-5 08:53
最近遇到了同样的问题,extend参数是如何设置的呢?

在contourf里设置extend=‘both’
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-7 08:43:34 | 显示全部楼层
灰色节能君 发表于 2020-8-5 16:11
在contourf里设置extend=‘both’

谢谢~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表