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

如何将Seaborn环形柱状图叠加到地图并匹配指定坐标?

如何在地图上叠加偏移到指定经纬度的Seaborn环形柱状图

问题描述

我需要把一张地图图片和Seaborn环形柱状图叠加,同时将环形柱状图定位到地图上的指定经纬度位置,实现类似目标示例图的效果。但写代码时遇到了两个问题:

  • 加上subplot_kw=dict(polar=True)会让背景地图变形
  • 删掉这个参数后,柱状图变成了矩形,没法实现环形效果

想知道能不能通过定义不同坐标轴或其他方式解决这个问题,最终基于参考方案得到了可行代码。

解决方案

核心思路是创建两个独立的坐标轴:一个用笛卡尔坐标系显示地图,另一个用极坐标系绘制环形柱状图,再通过调整极坐标轴的位置和尺寸,把它精准对应到地图上的目标经纬度区域。

以下是可行代码示例:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 1. 加载本地地图图片
map_img = plt.imread("your_map_path.png")  # 替换成你的地图文件路径

# 2. 创建主画布和地图专用坐标轴
fig, ax_map = plt.subplots(figsize=(10, 8))
# 替换extent里的数值为你的地图实际经纬度范围 [最小经度, 最大经度, 最小纬度, 最大纬度]
ax_map.imshow(map_img, extent=[110, 120, 30, 40])

# 3. 创建独立的极坐标坐标轴,用于绘制环形柱状图
# [left, bottom, width, height] 是相对于画布的比例(范围0-1),根据地图目标位置调整
ax_polar = fig.add_axes([0.35, 0.45, 0.2, 0.2], polar=True)

# 4. 绘制Seaborn环形柱状图(径向条形图)
categories = ["类别1", "类别2", "类别3", "类别4"]
values = [15, 25, 20, 30]
angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)

# 配置环形柱状图样式
sns.barplot(x=angles, y=values, ax=ax_polar, palette="coolwarm", width=0.6)
ax_polar.set_theta_zero_location("N")  # 设置极坐标零点指向正北
ax_polar.set_theta_direction(-1)  # 设置角度顺时针递增
ax_polar.set_yticklabels([])  # 隐藏径向刻度标签
ax_polar.set_xticks(angles)
ax_polar.set_xticklabels(categories)

plt.show()

关键细节说明

  • 地图轴ax_map用笛卡尔坐标系,通过extent参数匹配地图的真实经纬度范围,保证地图显示正常
  • 极坐标轴ax_polar通过fig.add_axes()独立创建,[left, bottom, width, height]四个参数是相对于整个画布的比例,需要根据地图上目标经纬度的位置换算调整,实现精准定位
  • 调整极坐标的零点位置和角度方向,让环形图的方位逻辑和地图保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:22:09