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

如何在Geopandas地图绘图中按X、Y坐标定位饼图?

在Geopandas地图中通过XY坐标定位饼图的方法

核心思路是利用matplotlib的inset_axes创建嵌入式子轴,并将其绑定到Geopandas地图的主坐标轴数据系统中,这样就能通过XY坐标精准定位饼图,同时避免破坏原有地图布局。

完整实现代码

import geopandas as gpd
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

# 加载底图数据(示例用世界地图)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
fig, ax = plt.subplots(figsize=(10, 6))
world.plot(ax=ax, color='lightgray', edgecolor='white')

# 示例点数据:包含XY坐标、饼图各部分占比、对应颜色
point_data = {
    'x': [0, 100, -50],
    'y': [0, 30, -20],
    'pie_sizes': [[30, 70], [40, 60], [20, 50, 30]],
    'pie_colors': [['#ff9999','#66b3ff'], ['#99ff99','#ffcc99'], ['#c2c2f0','#ffb3e6','#c4e17f']]
}

# 循环为每个点绘制饼图
for x, y, sizes, colors in zip(point_data['x'], point_data['y'], point_data['pie_sizes'], point_data['pie_colors']):
    # 创建嵌入式子轴,绑定主轴的数据坐标系统
    pie_ax = inset_axes(
        ax,
        width=0.05,  # 饼图宽度(主轴宽度的比例)
        height=0.05, # 饼图高度(主轴高度的比例)
        bbox_transform=ax.transData,  # 关键:使用主轴的数据坐标解析位置
        bbox_to_anchor=(x, y)         # 饼图中心对应的XY坐标
    )
    # 绘制饼图并隐藏子轴的边框和刻度
    pie_ax.pie(sizes, colors=colors)
    pie_ax.set_aspect('equal')
    pie_ax.axis('off')

plt.tight_layout()
plt.show()

关键细节说明

  • 坐标绑定:bbox_transform=ax.transData是核心,它让matplotlib用主地图轴的数据坐标(即你的XY坐标系统)来定位饼图,而不是默认的画布归一化坐标,这解决了之前创建子轴位置错乱的问题。
  • 饼图大小调整:width和height参数用浮点数时,代表占主轴尺寸的比例(比如0.05就是5%),可根据地图缩放级别灵活调整;也可以用绝对单位(如width='30px')固定大小。
  • CRS一致性:确保你的XY坐标和底图的坐标系(CRS)完全一致,否则饼图会出现在错误位置。
  • 位置微调:如果饼图需要偏离点中心,可修改bbox_to_anchor的数值,比如(x+3, y+2)让饼图向右上方偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:33:18