如何设置Matplotlib水平对齐子图间隙颜色与右侧子图一致?
解决Matplotlib子图间隙颜色匹配右侧子图的问题
错误原因分析
报错AttributeError: 'Axes' object has no attribute 'transFigure'是因为transFigure是Figure对象的坐标变换属性,并非Axes对象的属性,你之前误在Axes实例(ax1、ax2)上调用该属性,导致触发错误。
正确实现方案
要让子图间隙颜色与右侧子图一致,无需手动计算复杂坐标绘制patch,更简洁的方式是通过获取子图位置直接定位间隙区域,填充对应颜色。以下是修正后的代码:
import matplotlib.pyplot as plt import matplotlib.patches as patches fig1, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4)) # 设置坐标轴范围 ax1.set_xlim([1150, 1200]) ax1.set_ylim([-210, 10]) ax2.set_xlim([2350, 2400]) ax2.set_ylim([-210, 10]) # 定义背景色 shade_colorAr = 'mediumseagreen' shade_colorCO = 'indianred' # 给子图添加全屏背景 ax1.axvspan(ax1.get_xlim()[0], ax1.get_xlim()[1], facecolor=shade_colorAr, alpha=0.8) ax2.axvspan(ax2.get_xlim()[0], ax2.get_xlim()[1], facecolor=shade_colorCO, alpha=0.8) # 获取子图在figure中的归一化位置(坐标范围0-1) ax1_pos = ax1.get_position() ax2_pos = ax2.get_position() # 计算间隙区域的位置参数 gap_left = ax1_pos.x1 gap_bottom = ax1_pos.y0 gap_width = ax2_pos.x0 - ax1_pos.x1 gap_height = ax1_pos.y1 - ax1_pos.y0 # 创建填充间隙的矩形,复用右侧子图的颜色 rect = patches.Rectangle((gap_left, gap_bottom), gap_width, gap_height, linewidth=0, facecolor=shade_colorCO, alpha=0.8, zorder=0) # 将矩形添加到figure fig1.patches.append(rect) plt.show()
代码说明
- 用
ax.get_position()直接获取子图在figure中的位置,无需复杂的坐标转换 - 矩形的
zorder设为0,确保其在子图内容下方,不会遮挡子图元素 - 间隙颜色直接复用右侧子图的颜色变量,保证视觉一致性

内容的提问来源于stack exchange,提问作者Etienne
相关产品推荐
相关产品推荐

