如何在Iris Quick Plot中扩展色棒?遇QuadMesh属性错误
问题:如何在Iris绘图中扩展色棒两端?
你遇到的AttributeError是因为extend是色棒(colorbar)的专属参数,并非qplt.pcolormesh的可用参数,直接传给pcolormesh方法会报错。正确的做法是在创建色棒时指定extend='both'。
修改方案
- 先保存
qplt.pcolormesh返回的绘图对象 - 调用
plt.colorbar()时传入extend='both'参数
修改后的完整代码
import matplotlib.colors as mcolors import iris.plot as qplt import matplotlib.pyplot as plt import numpy as np import os import cartopy.feature as cf import iris def bnorm(min_val, max_val, nlevels): ''' small function to set the boundary norm and colormap using a min, max and number of colors ''' # set up even bounds bounds = np.linspace(min_val, max_val, nlevels) # get one more color than bounds from colormap colors = plt.get_cmap('BrBG')(np.linspace(0,1,len(bounds)-1)) cmap = mcolors.ListedColormap(colors) # create norm from bounds norm = mcolors.BoundaryNorm(boundaries=bounds, ncolors=len(bounds)-1) return norm, cmap plotno=0 plt.figure(figsize=(14, 12)) for row, models in enumerate(['GERICS', 'CLMcom']): for col, drivers in enumerate(['Nor','MPI','MOHC']): chan = os.path.join(CLIMDIR, 'pr_'+drivers+'_change_'+models+'_avg_max_day.nc') change = iris.load_cube(chan) plotno+=1 # Future Change norm, cmap = bnorm(-80, 80, 9) plt.subplot(2, 3, plotno) # 保存pcolormesh返回的QuadMesh对象 mesh = qplt.pcolormesh(change, norm=norm, cmap=cmap) plt.title('Daily Precipitation(mm/day)\n2071-2100 - Relative to 1981-2010') ax = plt.gca() ax.coastlines() ax.add_feature(cf.BORDERS) # 给当前子图添加色棒,并指定extend参数 plt.colorbar(mesh, extend='both') plt.tight_layout() # 可选,调整子图间距避免标题和色棒重叠 plt.show()
补充说明
- 由于你使用了
BoundaryNorm,当数据值超出bnorm设置的-80到80范围时,会被映射到两端的颜色,配合extend='both'会在色棒两端显示小三角,直观标识超出范围的数值。 - 修正了原代码中
import iris.plot as iplt但实际调用qplt的不一致问题,统一为qplt避免混淆。
内容的提问来源于stack exchange,提问作者António Manuel Lameira Gaspar
相关产品推荐
相关产品推荐

