如何将Matplotlib对数色条的10幂刻度改为0.1~10的普通数值
解决方法
你之前写的ax.ticklabel_format作用对象是地图的经纬度坐标轴,并不会修改色条的刻度格式,所以不生效。
针对你要的0.1到10区间、7个左右普通数值刻度的需求,我们可以直接指定对数刻度位置为[0.1, 0.2, 0.5, 1, 2, 5, 10],刚好7个符合要求,同时把色条的格式化器设置为关闭科学计数法的普通数值格式即可。
具体修改步骤
- 删掉你原来标注为DOES NOT WORK的那行
ax.ticklabel_format(style='plain',useMathText=None),该配置对色条无效 - 修改
chl.plot里的cbar_kwargs参数,补充刻度和格式化配置,可直接复用你已经导入的ScalarFormatter
修改后的核心代码段
# 先定义7个目标刻度 cbar_ticks = [0.1, 0.2, 0.5, 1, 2, 5, 10] # 定义格式化器,关闭科学计数法 formatter = ScalarFormatter(useMathText=False) formatter.set_scientific(False) # 绘图代码 chl.plot(ax=ax, transform=ccrs.PlateCarree(), vmin=0.1, vmax=10, extend='both', cbar_kwargs={'shrink': 0.2, 'pad':0.01, 'ticks': cbar_ticks, 'format': formatter}, cmap="jet", norm=LogNorm(vmax=10))
如果想要统一保留1位小数显示,也可以直接用FormatStrFormatter('%.1f')替换上面的ScalarFormatter,出来的刻度就是0.1、0.2、0.5、1.0、2.0、5.0、10.0的效果。如果运行代码提示plt或者ccrs未定义,在导入部分补两行即可:
import matplotlib.pyplot as plt import cartopy.crs as ccrs
内容的提问来源于stack exchange,提问作者OlegRuskiy
相关产品推荐
相关产品推荐

