使用plt.subplot_mosaic调用axvspan报错:'str'对象无axvspan属性
问题解决:'str' object has no attribute 'axvspan'
你遇到的问题和axvspan与subplot_mosaic兼容无关,核心原因是遍历ax1的方式错误:
plt.subplot_mosaic返回的ax1是一个字典,其中键是你定义的子图标签(比如'a)'、'b)'),值才是对应的坐标轴(Axes)对象。直接for ax in ax1会遍历字典的键(字符串类型),调用ax.axvspan()自然会触发属性错误。
修复方案
把遍历方式改成遍历字典的值即可,两种常用写法如下:
写法1:直接遍历坐标轴对象
fig1, ax1 = plt.subplot_mosaic([['a)', 'a)'], ['b)', 'b)'], ['c)', 'c)'], ['d)', 'd)'], ['e)', 'e)']], figsize=(10, 25), sharex=True) # ... 你的绘图代码 ... for ax in ax1.values(): ax.axvspan(400, 600, color='k', alpha=0.1, lw=0, zorder=-1)
写法2:遍历键值对(需用到子图标签时使用)
for label, ax in ax1.items(): # 若需要根据标签执行差异化操作,可在此处添加逻辑 ax.axvspan(400, 600, color='k', alpha=0.1, lw=0, zorder=-1)
修改后即可在每个子图的x坐标400-600区间正确添加填充区域。
内容的提问来源于stack exchange,提问作者Ismail Chishti
相关产品推荐
相关产品推荐

