基于 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()
无法弄清楚为什么我的代码没有显示 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()