如何移除或调整xarray quiver绘图自动生成的quiverkey
xarray绘制quiver矢量图时自动生成quiverkey的问题解决
问题描述
使用xarray的plot.quiver()方法绘制矢量图时,会默认自动生成quiverkey,和手动通过ax.quiverkey()添加的自定义key重复;且自动生成的key样式固定、容易超出绘图边界,触发保存图片时的尺寸报错,通过色块遮挡的临时方案维护成本较高。
问题复现代码:
wnd = xr.merge([u, v]) fig, ax = plt.subplots() wnd_plot = wnd.plot.quiver( x = "latitude", y = "level", ax = ax, u='v', v='w', width=0.0025 ,headaxislength=2,headlength=4,headwidth=4, scale=200, colors="dimgray", clip_on = False) qv_key = ax.quiverkey(wnd_plot, 0.94,1.03,5,r'5',labelpos='N', labelsep =0.05, color='dimgray')
运行后会出现两个quiverkey,效果如下:
方案1:直接关闭自动生成的quiverkey(推荐)
xarray的quiver绘图方法提供了原生参数控制quiverkey的生成,调用时传入add_guide=False即可完全禁用自动绘制的quiverkey,不会产生重复key,原有手动添加自定义key的代码无需修改。
修改后代码:
wnd = xr.merge([u, v]) fig, ax = plt.subplots() wnd_plot = wnd.plot.quiver( x = "latitude", y = "level", ax = ax, u='v', v='w', width=0.0025 ,headaxislength=2,headlength=4,headwidth=4, scale=200, colors="dimgray", clip_on = False, add_guide=False # 新增该行关闭自动quiverkey ) qv_key = ax.quiverkey(wnd_plot, 0.94,1.03,5,r'5',labelpos='N', labelsep =0.05, color='dimgray')
方案2:直接修改自动生成quiverkey的样式
如果不想手动编写quiverkey代码,可直接获取xarray自动生成的quiverkey实例,修改其位置、样式参数,不需要额外叠加色块遮挡。xarray返回的quiver对象将自动生成的key存储在_quiverkey属性中,直接修改对应属性即可完成自定义:
wnd = xr.merge([u, v]) fig, ax = plt.subplots() wnd_plot = wnd.plot.quiver( x = "latitude", y = "level", ax = ax, u='v', v='w', width=0.0025 ,headaxislength=2,headlength=4,headwidth=4, scale=200, colors="dimgray", clip_on = False ) # 提取自动生成的quiverkey实例 auto_qkey = wnd_plot._quiverkey # 调整位置(坐标为轴域相对坐标,取值0-1对应轴的左下到右上边界) auto_qkey.X = 0.94 auto_qkey.Y = 1.03 # 调整key对应的矢量长度、标签文本 auto_qkey.U = 5 auto_qkey.label = r'5' # 调整标签位置、与key的间距 auto_qkey.labelpos = 'N' auto_qkey.labelsep = 0.05 # 调整key颜色 auto_qkey.color = 'dimgray'
补充提示
如果调整key位置后仍偶发保存时报尺寸错误,可在plt.savefig()中传入bbox_inches='tight'参数,自动适配裁切绘图边界,避免多余空白触发报错。色块遮挡属于临时方案,会增加不必要的绘图元素,提升后续布局调整的成本,不推荐使用。
内容的提问来源于stack exchange,提问作者Grace Wang
相关产品推荐
相关产品推荐

