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

如何在Plotly Choropleth Mapbox中复用区域坐标添加标注

解决Plotly Choropleth Mapbox自动提取GeoJSON坐标添加标注的问题

核心思路是从GeoJSON的省份几何数据中自动计算标注位置(比如质心),再和你的业务数据关联,避免手动输入坐标。以下是具体实现步骤:

1. 提取GeoJSON中省份的中心坐标

用shapely库解析GeoJSON的几何图形,计算每个省份的质心(或内部代表点),这是最适合标注的位置:

import pandas as pd
from shapely.geometry import shape

# 假设你的GeoJSON数据存在变量geojson中
centroid_data = []
for feature in geojson["features"]:
    # 解析几何图形
    geom = shape(feature["geometry"])
    # 计算质心坐标(如果质心位置不合适,换成geom.representative_point())
    centroid = geom.centroid
    # 存储省份名称和坐标,注意这里的properties字段要和你的GeoJSON对应
    centroid_data.append({
        "state": feature["properties"]["state"],
        "lat": centroid.y,
        "lon": centroid.x
    })

# 转成DataFrame方便后续合并
centroid_df = pd.DataFrame(centroid_data)

2. 合并业务数据与坐标数据

把你包含省份和价格的业务数据(假设是df)和上面的坐标数据按省份名称合并:

# 确保df和centroid_df的state列完全匹配(大小写、拼写一致)
merged_df = pd.merge(df, centroid_df, on="state")

3. 生成地图并添加自动定位的标注

用合并后的数据初始化地图,再通过add_scattermapbox添加标注:

import plotly.express as px
import plotly.graph_objects as go

# 初始化Choropleth Mapbox
fig = px.choropleth_mapbox(
    merged_df,
    geojson=geojson,
    locations="state",
    featureidkey="properties.state",  # 对应GeoJSON里的省份属性名
    color="price",
    mapbox_style="carto-positron",
    zoom=3,
    center={"lat": -38.4161, "lon": -63.6167},  # 阿根廷中心坐标
    opacity=0.5
)

# 添加标注,自动使用GeoJSON提取的坐标
fig.add_scattermapbox(
    lat=merged_df["lat"],
    lon=merged_df["lon"],
    text=merged_df["price"].apply(lambda x: f"${x}"),  # 格式化价格显示
    mode="text",
    textfont=dict(size=12, color="#000000"),
    textposition="bottom center",  # 让标注显示在区域下方,符合你的需求
    showlegend=False
)

# 调整布局去掉边距
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

注意事项

  • 务必保证GeoJSON中省份的属性名(比如feature["properties"]["state"])和你的业务数据df里的state列完全一致,否则合并会丢失数据。
  • 如果某些省份的质心落在区域外(比如狭长或分散的省份),把geom.centroid换成geom.representative_point(),这个方法会返回多边形内部的点,位置更合理。
  • 可以通过textfont和textposition参数调整标注的样式和位置,满足你的显示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:22:21