无法在布局了邮政编码的 folium 地图上绘制等值线数据

Unable to draw choropleth data on folium map with Zip Code laid out

我的数据只是一个简单的 csv,其中包含邮政编码列和未保险列,以表示该邮政编码中未保险人口的百分比。邮政编码的 geojson 文件也附在此处

zip_uninsured.csv

Zipcodes_Arc.geojson

我的代码如下:

import folium
import pandas as pd
import numpy as np
import os
import geopandas as gpd

geo_data_file=os.path.join('Zipcodes_Arc.geojson')

#load GeoJSON
with open(geo_data_file, 'r') as jsonFile:
    geo_df=gpd.read_file(jsonFile)
tmp=geo_df



df=pd.read_csv(os.path.join('zip_uninsured.csv'))



#remove ZIP codes not in geo data

tmp.info()
print(tmp.CODE)
geoJSON_zips=list(tmp.CODE.unique())
df_zips=list(df.zipcode)



missing_zips = np.setdiff1d(geoJSON_zips,df_zips)

tmp = tmp.rename(columns = {"CODE":"zipcode"})


my_map = folium.Map(location=[39.95228, -75.16245], zoom_start=9,
                   detect_retina=True, control_scale=False)

folium.Choropleth(
        geo_data=geo_df,
        name='choropleth',
        data=df,
        columns=[ 'Uninsured','zipcode'],
        key_on='zipcode',
        fill_color='OrRd',
        fill_opacity=0.2,
        line_opacity=0.8,
        line_color='Blue',
        legend_name='Uninsured'
    ).add_to(my_map)

在 folium 地图上正确绘制了蓝色轮廓的邮政编码轮廓,但等值区值不正确(颜色未填充在邮政轮廓中。

我对 python 的地理空间方面尤其陌生,如果有任何帮助可以解决此问题,我们将不胜感激。

(这个问题好像和不太一样)

您无法绘制图形的原因可能是geopandas 的几何形状是线段。我从 here 获得了邮政编码 geojson 文件来处理这个问题。此文件为多边形格式。此外,如果您按原样在 goepandas 中引用它,则 key_on 中引用的键将是 'feature.propeties.zipcode'。很重要的一点是geojson要关联的邮编是字符串,所以用户数据也必须是字符串。

import folium
import pandas as pd
import numpy as np
import os
import geopandas as gpd

#load GeoJSON
geo_data_file=os.path.join('./data/Zipcodes_Poly.geojson')

with open(geo_data_file, 'r') as jsonFile:
    geo_df=gpd.read_file(jsonFile)

geo_df = geo_df.rename(columns = {"CODE":"zipcode"})

df = pd.read_csv(os.path.join('./data/zip_uninsured.csv'), index_col=0)
df['zipcode'] = df['zipcode'].astype(str)

my_map = folium.Map(location=[39.95228, -75.16245], zoom_start=11,
                   detect_retina=True, control_scale=False)

folium.Choropleth(
        geo_data=geo_df,
        name='choropleth',
        data=df,
        columns=['zipcode','Uninsured'],
        key_on='feature.properties.zipcode',
        fill_color='OrRd',
        fill_opacity=0.5,
        line_opacity=0.8,
        line_color='Blue',
        legend_name='Uninsured'
    ).add_to(my_map)

my_map