Plotly px.choropleth不从json文件中绘制数据

2024-09-28 03:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下结构的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”

我做错了什么?提前感谢您提供的所有帮助。


Tags: 文件csvnameimportidjsonastype
1条回答
网友
1楼 · 发布于 2024-09-28 03:19:34

要绘制地图,px.choropleth()必须将数据帧的ID与GeoJSON的ID匹配。 使用参数locations指定数据帧中ID为的列。 您缺少的是参数featureidkey,用于在GeoJSON中指定相同的ID。或者,您可以省略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()

相关问题 更多 >

    热门问题