Plotly px.choropleth 不从 json 文件中绘制数据
Plotly px.choropleth not drawing data from json file
我有一个具有以下结构的 CSV 文件
cardodb_id,CONCELHO,LAT,LONG,DATA,INC 225,Abrantes,39.466667,-8.2,2020-03-25,1000
以及具有以下结构的 Json 文件:
{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-8.163874,39.626553],[-8.164286,39.626686],[-8.165384,39.626633],*(more coordinates' pairs)*,[-8.163874,39.626553]]]},"properties":{"cartodb_id":225,"id_2":225,"id_1":16,"id_0":182,"varname_2":null,"nl_name_2":null,"engtype_2":"Municipality","type_2":"Concelho","name_2":"Abrantes","name_1":"Santarém","name_0":"Portugal","iso":"PRT","split_id":"1"}} ]}
这里的 CSV 文件和 json 文件都是一个更大的集合的一部分,但这只是一个例子
我的代码如下
import json
with open('abrantes.json') as json_file:
abr = json.load(json_file)
import pandas as pd
df = pd.read_csv("abrantes.csv")
import plotly.express as px
fig = px.choropleth(df, geojson=abr, locations='cardodb_id', color='INC',
color_continuous_scale="Viridis",
range_color=(0, 5000),
labels={'INC':'Incidência'}
)
fig.show()
最终结果是一个空白地图,右侧的比例从 0 到 5000,而我期望多边形填充对应于“INC”的颜色,即“1000”。
我做错了什么?预先感谢您提供的所有帮助。
要绘制地图,px.choropleth() 必须将数据框的 ID 与 GeoJSON 的 ID 相匹配。
使用参数 locations
,您可以在数据框中指定具有 ID 的列。
您缺少的是用于在 GeoJSON 中指定相同 ID 的参数 featureidkey
。或者,您可以省略 featureidkey
但 GeoJSON 中的功能需要参数 id
.
那你得注意拼写了。你的 csv 文件有一列 cardodb_id
,你的 GeoJSON 有一个参数 cartodb_id
.
并且由于您提供的多边形非常小,因此在世界地图上是看不到的。因此,我建议添加 fig.update_geos(fitbounds="locations")
以将地图缩放到感兴趣的区域。
import json
import pandas as pd
import plotly.express as px
with open('abrantes.json') as json_file:
abr = json.load(json_file)
df = pd.read_csv("abrantes.csv")
fig = px.choropleth(df, geojson=abr, locations='cardodb_id', color='INC',
color_continuous_scale="Viridis",
featureidkey="properties.cartodb_id",
range_color=(0, 5000),
labels={'INC':'Incidência'}
)
fig.update_geos(fitbounds="locations")
fig.show()
我有一个具有以下结构的 CSV 文件
cardodb_id,CONCELHO,LAT,LONG,DATA,INC 225,Abrantes,39.466667,-8.2,2020-03-25,1000
以及具有以下结构的 Json 文件:
{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-8.163874,39.626553],[-8.164286,39.626686],[-8.165384,39.626633],*(more coordinates' pairs)*,[-8.163874,39.626553]]]},"properties":{"cartodb_id":225,"id_2":225,"id_1":16,"id_0":182,"varname_2":null,"nl_name_2":null,"engtype_2":"Municipality","type_2":"Concelho","name_2":"Abrantes","name_1":"Santarém","name_0":"Portugal","iso":"PRT","split_id":"1"}} ]}
这里的 CSV 文件和 json 文件都是一个更大的集合的一部分,但这只是一个例子
我的代码如下
import json
with open('abrantes.json') as json_file:
abr = json.load(json_file)
import pandas as pd
df = pd.read_csv("abrantes.csv")
import plotly.express as px
fig = px.choropleth(df, geojson=abr, locations='cardodb_id', color='INC',
color_continuous_scale="Viridis",
range_color=(0, 5000),
labels={'INC':'Incidência'}
)
fig.show()
最终结果是一个空白地图,右侧的比例从 0 到 5000,而我期望多边形填充对应于“INC”的颜色,即“1000”。
我做错了什么?预先感谢您提供的所有帮助。
要绘制地图,px.choropleth() 必须将数据框的 ID 与 GeoJSON 的 ID 相匹配。
使用参数 locations
,您可以在数据框中指定具有 ID 的列。
您缺少的是用于在 GeoJSON 中指定相同 ID 的参数 featureidkey
。或者,您可以省略 featureidkey
但 GeoJSON 中的功能需要参数 id
.
那你得注意拼写了。你的 csv 文件有一列 cardodb_id
,你的 GeoJSON 有一个参数 cartodb_id
.
并且由于您提供的多边形非常小,因此在世界地图上是看不到的。因此,我建议添加 fig.update_geos(fitbounds="locations")
以将地图缩放到感兴趣的区域。
import json
import pandas as pd
import plotly.express as px
with open('abrantes.json') as json_file:
abr = json.load(json_file)
df = pd.read_csv("abrantes.csv")
fig = px.choropleth(df, geojson=abr, locations='cardodb_id', color='INC',
color_continuous_scale="Viridis",
featureidkey="properties.cartodb_id",
range_color=(0, 5000),
labels={'INC':'Incidência'}
)
fig.update_geos(fitbounds="locations")
fig.show()