python 如何绘制邮政编码级别的ChoroplethMap

l5tcr1uw  于 2023-05-21  发布在  Python
关注(0)|答案(1)|浏览(118)

我有一个Pandas dataframe df,看起来如下:

user_id   zip_code    city              county        state
0001      10021       New York          New York      NY
0002      10003       New York          New York      NY
0003      06831       Greenwich         Fairfield     CT
0004      33172       Miami             Miami-Dade    FL
0005      07417       Franklin Lakes    Bergen        NJ

我尝试使用以下内容绘制***邮政编码***级别的分区图:

from urllib.request import urlopen
import json
import requests

with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
    counties = json.load(response)

fig = px.choropleth(df,
                    geojson= counties,
                    locations='fips', 
                    locationmode="USA-states", 
                    scope="usa",
                    color='user_id',
                    color_continuous_scale="blues",
                    )

fig.show()

但是,贴图渲染为空白。
如何渲染***邮政编码级别***分区图?

ldxq2e6h

ldxq2e6h1#

不显示它的原因是因为您正在使用的geojson文件没有邮政编码数据。因此,有必要准备一个带有邮政编码的geojson文件。例如,我用here的样本数据创建了一个图。根据您的数据,如果您要处理整个美国的邮政编码,数据数量将非常庞大,并会影响性能。

from urllib.request import urlopen
import json
import requests

# Nevada Zip code
url = 'https://raw.githubusercontent.com/OpenDataDE/State-zip-code-GeoJSON/master/nv_nevada_zip_codes_geo.min.json'
with urlopen(url) as response:
    nv_zip_json = json.load(response)

zip_code = []
for i in range(len(nv_zip_json['features'])):
    code = nv_zip_json['features'][i]['properties']['ZCTA5CE10']
    zip_code.append(code)

import pandas as pd
import numpy as np
df = pd.DataFrame({'zip_code': zip_code, 'value': np.random.randint(0,30, len(nv_zip_json['features']))})
df['zip_code'] = df['zip_code'].astype(str)

import plotly.express as px

fig = px.choropleth(df,
                    geojson= nv_zip_json,
                    locations='zip_code',
                    featureidkey="properties.ZCTA5CE10",
                    color='value',
                    color_continuous_scale="blues",
                    projection="mercator",
                    )

fig.update_geos(fitbounds="locations", visible=False)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

fig.show()

要使用当前数据按县绘制Map,可以使用以下代码。

import plotly.express as px

fig = px.choropleth(df,
                    geojson= counties,
                    locations='county',
                    featureidkey="properties.NAME",
                    scope="usa",
                    color='user_id',
                    color_continuous_scale="blues",
                    )

fig.show()

相关问题