
本文介绍如何在 matplotlib 双 choropleth 子图中,将共享的 colorbar 或图例统一放置在整幅图形底部中央,避免默认附着于单个子图,并提供可直接复用的代码方案与关键参数说明。
本文介绍如何在 matplotlib 双 choropleth 子图中,将共享的 colorbar 或图例统一放置在整幅图形底部中央,避免默认附着于单个子图,并提供可直接复用的代码方案与关键参数说明。
在使用 geopandas.GeoDataFrame.plot() 绘制双 choropleth 地图(如全国与局部区域对比)时,column 参数会自动触发颜色映射,但其内置的 legend=True 仅将图例绑定到对应子图轴上,无法跨子图统一控制位置。要实现“色阶图例居中置于两图下方”这一常见出版级排版需求,不能依赖 ax.legend()(适用于分类图例),而应使用 fig.colorbar() 配合 ScalarMappable,或更简洁地采用 fig.legend() + bbox_to_anchor 进行全局定位。
以下是推荐的完整解决方案(基于您原始代码优化):
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize
# 假设 norm 已定义(如:norm = Normalize(vmin=0, vmax=100))
a_combined_path = 'c:\mypath'
fig, (ax1, ax2) = plt.subplots(1, 2, layout='constrained')
fig.set_size_inches(10, 5.5) # 高度适当减小,为底部图例留出空间
# 绘制地图(禁用内置图例)
a_2020.plot(ax=ax1, column='Party Vote Share', cmap='Greens',
edgecolor='black', linewidth=0.5, norm=norm, legend=False)
a_dublin.plot(ax=ax2, column='Party Vote Share', cmap='Greens',
edgecolor='black', linewidth=0.5, norm=norm, legend=False)
ax1.set_axis_off()
ax2.set_axis_off()
ax1.set_title('Republic of Ireland', size=16)
ax2.set_title('Dublin', size=16)
fig.suptitle('Aontú vote share in the 2020 elections
by constituency (Pct of total vote)', size=16)
# ✅ 关键步骤:创建 ScalarMappable 并添加全局 colorbar
sm = cm.ScalarMappable(cmap='Greens', norm=norm)
sm.set_array([]) # 必需调用,否则 colorbar 报错
cbar = fig.colorbar(sm, ax=[ax1, ax2], shrink=0.4, aspect=20,
location='bottom', pad=0.15, anchor=(0.5, 0))
cbar.set_label('Party Vote Share (%)', size=14)
plt.savefig(a_combined_path, dpi=600, bbox_inches='tight')
plt.show()
核心要点说明:
- ax=[ax1, ax2]:使 colorbar 关联两个子图,确保其尺寸和位置基于整体布局计算;
- location='bottom':直接指定 colorbar 位于图形底部(Matplotlib 3.7+ 支持);
- shrink=0.4 和 pad=0.15:精细控制宽度与底部间距,避免遮挡标题;
- anchor=(0.5, 0):将 colorbar 锚点设在底部水平居中位置(x=0.5, y=0);
- bbox_inches='tight':导出时自动裁剪空白边距,防止图例被截断。
⚠️ 注意事项:
- 若使用较旧 Matplotlib 版本(
- legend=False 在 plot() 中必须显式设置,否则每个子图会生成独立图例;
- sm.set_array([]) 是必需步骤,用于满足 ScalarMappable 的内部校验逻辑。
该方案生成专业、紧凑且语义清晰的双地图可视化,图例严格居中于底部,符合学术出版与报告展示标准。











