You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多个GeoPandas绘图设置统一色条与颜色范围

统一GeoPandas子图的颜色范围与共享色条解决方案

要实现三个子图共用同一颜色范围和色条,核心是先确定全局数据的颜色极值,再给每个子图绑定该范围,最后基于绘图对象创建共享色条。具体修改如下:

  1. 计算全局颜色极值
    先提取三个年份列的所有数据,算出统一的最小值和最大值,作为所有子图的颜色映射边界:
# 获取2015-2017年的所有数据,计算全局极值
all_values = result[['2015', '2016', '2017']].values.flatten()
vmin = all_values.min()
vmax = all_values.max()
  1. 修改绘图代码,绑定统一颜色范围
    绘图时给每个子图指定vmin和vmax,确保颜色映射完全一致,再添加共享色条:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

# 创建画布和子图,统一设置整体尺寸
fig, axs = plt.subplots(ncols=3, figsize=(9, 3))

# 关闭所有子图坐标轴
for ax in axs:
    ax.axis('off')

# 绘制子图,指定统一的颜色范围和配色
im1 = result.plot(column='2015', ax=axs[0], cmap='viridis', edgecolor="Black", linewidth=0.2, vmin=vmin, vmax=vmax)
result.plot(column='2016', ax=axs[1], cmap='viridis', edgecolor="Black", linewidth=0.2, vmin=vmin, vmax=vmax)
result.plot(column='2017', ax=axs[2], cmap='viridis', edgecolor="Black", linewidth=0.2, vmin=vmin, vmax=vmax)

# 添加对齐的共享色条
divider = make_axes_locatable(axs[2])
cax = divider.append_axes("right", size="5%", pad=0.1)
fig.colorbar(im1.collections[0], cax=cax)

plt.tight_layout()
plt.show()

关键说明:

  • 之前用fig.colorbar()报错,是因为GeoPandas的plot返回的是坐标轴对象,而非颜色映射所需的ScalarMappable,需要从子图的collections中提取绘图对应的PatchCollection(即im1.collections[0])作为色条的映射源。
  • make_axes_locatable工具可以让色条高度和子图完全对齐,避免默认布局的不协调问题。
  • 把figsize放在plt.subplots()中设置,比在每个plot里重复设置更合理,避免尺寸混乱。

内容的提问来源于stack exchange,提问作者Clare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:35:17