基于 geojson 创建一个 plotly choropleth

Creating a plotly choropleth based on a geojson

无法弄清楚为什么我的代码没有显示 geojson(只是世界的基本地图)。

我做错了什么?

geojson 文件是 https://raw.githubusercontent.com/isellsoap/deutschlandGeoJSON/main/4_kreise/2_hoch.geo.json

import json
import pandas as pd

geoJSONFile = projectFolder+'geoJSON/DE-kreise.geo.json'
with open(geoJSONFile) as response:
    polygons = json.load(response)

df = pd.DataFrame([{'fips':1,'unemp':2.4,
                   'fips':2,'unemp':5.4,
                   'fips':3,'unemp':3.4,
                   'fips':4,'unemp':7.4,
                   'fips':5,'unemp':9.4,
                   'fips':6,'unemp':0.4,
                   'fips':7,'unemp':10.4,
                   'fips':8,'unemp':5.4}])

import plotly.express as px

fig = px.choropleth(df, geojson=polygons, locations='fips', color='unemp',
                           color_continuous_scale="Viridis",
                           range_color=(0, 12),
                           #scope="europe",
                           labels={'unemp':'unemployment rate'}
                          )
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
  • 您已声明您要使用的 geojson 是基于共享 URL 的德国地区
  • 通常fips用于标识美国的一个区域。我仍然在构建使用 ID_3 属性 geojson 域 [=27] 的数据框时使用它=]
  • 答案确实是 featureidkey 参数。这定义了 geojson 中的 属性 用于匹配 locations 参数值
  • 你的数据框构造有问题,所以我生成了另一个数据框来使这个例子工作
import json
import requests
import pandas as pd
import numpy as np
import plotly.express as px


# df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
#                   dtype={"fips": int})
polygons = requests.get(
    "https://raw.githubusercontent.com/isellsoap/deutschlandGeoJSON/main/4_kreise/2_hoch.geo.json"
).json()


# generate some data for each region defined in geojson...
df = pd.DataFrame(
    {"fips": range(1, 434, 1), "unemp": np.random.uniform(0.4, 10.4, 433)}
)

fig = px.choropleth(
    df,
    geojson=polygons,
    locations="fips",
    featureidkey="properties.ID_3",
    color="unemp",
    color_continuous_scale="Viridis",
    range_color=(0, 12),
    # scope="europe",
    labels={"unemp": "unemployment rate"},
)
fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
fig.update_geos(fitbounds="locations", visible=True)
fig.show()