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

Posted

技术标签:

【中文标题】无法在布局了邮政编码的叶子地图上绘制等值线数据【英文标题】:Unable to draw choropleth data on folium map with Zip Code laid out 【发布时间】:2022-01-09 12:17:30 【问题描述】:

我的数据只是一个简单的 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)

邮政编码轮廓以蓝色轮廓正确绘制在叶地图上,但等值线值不是(邮政轮廓未填充颜色。

我对 python 的地理空间方面特别陌生,并且有义务帮助解决这个问题。

(这个问题好像和folium blank choropleth map on jupyter, possible JSON format issue不一样)

【问题讨论】:

【参考方案1】:

您无法绘制图形的原因可能是 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

【讨论】:

非常感谢您向我展示了问题所在以及如何解决问题。现在完美运行。 很高兴我也能帮助到你。请接受我的回答。 What should I do when someone answers my question?

以上是关于无法在布局了邮政编码的叶子地图上绘制等值线数据的主要内容,如果未能解决你的问题,请参考以下文章

按邮政编码“查找最近的位置”?

谷歌是如何得到地图上邮政编码的大纲的?

Google Maps API - 获取最接近邮政编码的点

SQL Server 数据库可以通过英国邮政编码驱动 Google 地图吗?

如何从地图上获取街道地址、邮政编码、国家、州?

MongoDB - 地理空间交叉点性能