基于自定义GeoJSON创建Plotly等值区域图遇问题求助
问题排查与修复方案
核心问题
你的代码无法正确渲染 choropleth 地图,根源在于两个匹配错误:
- 类型不匹配:GeoJSON 里的
properties.AGS是带前导零的字符串(如"01001"),但你生成的fips列是整数,Plotly 无法完成关联匹配。 - 编码无效:德国县的 AGS 编码是5位格式,你用
range(1,403)生成的1-402整数不仅缺少前导零,且和实际存在的AGS编码完全不对应,导致大部分区域无法匹配。
修复代码
import requests import pandas as pd import numpy as np import plotly.express as px # 加载GeoJSON数据 polygons = requests.get("https://raw.githubusercontent.com/JohnSmith1790/bigdata/main/landkreise_simplify0.geo.json").json() # 提取GeoJSON中所有真实的AGS编码 valid_ags_codes = [feat["properties"]["AGS"] for feat in polygons["features"]] # 创建与AGS编码完全匹配的数据集 df = pd.DataFrame({ "ags": valid_ags_codes, "unemp": np.random.uniform(0.0, 501, len(valid_ags_codes)) }) fig = px.choropleth( df, geojson=polygons, locations="ags", featureidkey="properties.AGS", color="unemp", color_continuous_scale="viridis", range_color=(0, 501), labels={"unemp": "Gesamtscore"} ) fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0}) fig.update_geos(fitbounds="locations", visible=True) fig.show()
修复说明
- 直接从GeoJSON中提取真实的AGS编码作为关联键,保证数据类型(字符串)和格式(5位带前导零)完全匹配Plotly的要求。
- 不再使用虚构的连续整数作为编码,确保每个地理区域都能找到对应的数据,地图可以正确渲染。
内容的提问来源于stack exchange,提问作者JohnSmith
相关产品推荐
相关产品推荐

