爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7378|回复: 7

[求助] 求助 关于python的colorbar!

[复制链接]

新浪微博达人勋

发表于 2022-7-23 19:44:55 | 显示全部楼层 |阅读模式

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

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

x
想请教各位前辈!python的matplotlib怎么把colorbar画成以0为分界点,负值和正值分别一个色调。



下载.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-7-24 10:24:04 | 显示全部楼层
这个可以调整plt.contourf()里的参数vmin和vmax,比如设置vmin=-10,vmax=10,这样0值左右就能刚好代表两个色调。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-24 19:46:59 | 显示全部楼层
from matplotlib.colors 可以import 一个TwoSlopeNorm,在画图的时候可以设置norm=TwoSlopeNorm(中心,最小,最大)来约束画图的最大最小还有中心,可以只填一个中心,不用写最大最小
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-25 19:02:22 | 显示全部楼层
雨落森林 发表于 2022-7-24 19:46
from matplotlib.colors 可以import 一个TwoSlopeNorm,在画图的时候可以设置norm=TwoSlopeNorm(中心,最小 ...

你好 我用了这个, 但是出现了colorbar的刻度线和数字对不齐的情况,请问有什么好的解决办法吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-25 19:06:37 | 显示全部楼层
乱将白云揉碎 发表于 2022-7-25 19:02
你好 我用了这个, 但是出现了colorbar的刻度线和数字对不齐的情况,请问有什么好的解决办法吗?

画出来是这样的
1658746970527.jpg
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-26 11:57:58 | 显示全部楼层

这个好像没啥太好的办法
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-26 16:37:14 | 显示全部楼层
雨落森林 发表于 2022-7-26 11:57
这个好像没啥太好的办法

好的 谢谢您 非常感谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-28 22:28:22 | 显示全部楼层
给楼主提供两个方法,欢迎批评指正:
法一,利用mpl.cm.ScalarMappable和norm设置colorbar
import matplotlib as mpl
cmap = plt.cm.jet # 以jet为例
norm = mpl.colors.BoundaryNorm(boundaries=[-1, 0, 1, 2, 3, 4, 5], ncolors=cmap.N)
cmap_colorbar = mpl.cm.ScalarMappable(norm=norm, cmap=cmap)
# 生成colorbar
cb = plt.colorbar(cmap1, shrink=1, pad=0.1, orientation="horizontal", fraction=0.05, ax=ax)

法2:调用colorbar的ax属性,在想加刻度的地方加上刻度
ax_cb = cb.ax
# 设置主刻度属性
ax_cb.tick_params(axis='both',which='major',labelsize=7,direction='in',length=4,width=0.5,
                            pad=1.2, top=False,right=False, left=False, bottom=True)
# 设置副刻度属性
ax_cb.tick_params(axis='both',which='minor',direction='in',length=2, width=0.5,
                            top=False,right=False, left=False, bottom=False)
# 假设在-1,0,1,2,3,4,5添加刻度
ax_cb.xaxis.set_major_locator(mpl.ticker.FixedLocator([-1, 0, 1, 2, 3, 4, 5]))

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

使用道具 举报

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

本版积分规则

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

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

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