无法在布局了邮政编码的 folium 地图上绘制等值线数据
Unable to draw choropleth data on folium map with Zip Code laid out
我的数据只是一个简单的 csv,其中包含邮政编码列和未保险列,以表示该邮政编码中未保险人口的百分比。邮政编码的 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
我的数据只是一个简单的 csv,其中包含邮政编码列和未保险列,以表示该邮政编码中未保险人口的百分比。邮政编码的 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