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

如何在Geopandas地图指定国家区域上方添加自定义图片

Geopandas在指定国家区域上方叠加自定义图片实现方案

完全可以实现,核心逻辑是提取每个目标国家多边形的几何中心点,通过matplotlib的图片标注接口将对应自定义图片锚定到中心点上方即可,不需要依赖额外复杂工具。


前置依赖安装

先安装需要的第三方库,执行命令:
pip install geopandas matplotlib pillow

完整实现步骤

  • 准备基础映射关系与底图数据
    先整理国家名称和对应图片路径的匹配字典,加载你已有的GeoDataFrame,也可以直接用geopandas自带的世界底图做测试:

    import geopandas as gpd
    import matplotlib.pyplot as plt
    from matplotlib.offsetbox import OffsetImage, AnnotationBbox
    from PIL import Image
    
    # 按你的需求配置国家-对应图片的映射规则
    country_img_config = {
        "United States of America": "coke.jpg",
        "Russia": "pepsi.jpg"
        # 其余国家按相同规则追加即可
    }
    
    # 加载世界底图,可替换为你自己的GeoDataFrame
    world_gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
    
  • 计算每个国家的图片锚点坐标
    为了避免高纬度国家几何中心偏移,先转成Web墨卡托投影计算中心点,再转回到原经纬度坐标系:

    # 投影转换后计算中心点
    proj_gdf = world_gdf.to_crs(epsg=3857)
    world_gdf["plot_x"] = proj_gdf.geometry.centroid.to_crs(world_gdf.crs).x
    world_gdf["plot_y"] = proj_gdf.geometry.centroid.to_crs(world_gdf.crs).y
    
  • 绘制底图并叠加自定义图片
    先绘制国家轮廓底图,再遍历匹配到规则的国家,将对应图片锚定到中心点上方,可自由调整图片大小、偏移量:

    # 创建绘图画布
    fig, ax = plt.subplots(figsize=(16, 9))
    # 绘制基础国家轮廓
    world_gdf.plot(ax=ax, color="#f2f2f2", edgecolor="#444444", linewidth=0.8)
    
    # 逐个叠加对应图片
    for _, row in world_gdf.iterrows():
        country_name = row["name"]
        if country_name not in country_img_config:
            continue
        # 读取目标图片
        mark_img = Image.open(country_img_config[country_name])
        # 设置图片缩放比例,根据你的图片实际尺寸调整,数值越大图片越大
        img_offset = OffsetImage(mark_img, zoom=0.025)
        img_offset.image.axes = ax
        # 配置图片锚定规则:xybox设置相对于中心点的偏移,第二个值越大图片位置越靠上
        img_anchor = AnnotationBbox(
            img_offset,
            (row["plot_x"], row["plot_y"]),
            xybox=(0, 12),
            xycoords="data",
            boxcoords="offset points",
            frameon=False # 关闭图片默认边框
        )
        ax.add_artist(img_anchor)
    
    # 隐藏坐标轴
    ax.set_axis_off()
    plt.tight_layout()
    plt.show()
    

参数调整提示

  • 若图片大小不符合预期,修改OffsetImage的zoom参数即可
  • 若图片位置偏下/偏上,调整xybox的第二个数值,单位是像素点
  • 针对形状狭长、中心点落在国土外的国家,可以手动指定该国家的plot_x、plot_y坐标,不需要统一用几何中心

需求效果参考

需求效果示例图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:48:31