Folium choropleth 地图仅显示灰色 - 有助于排除故障
Folium chloropleth map only showing grey - help to troubleshoot
我无法获取一些空气污染数据以在使用叶绿素的叶绿素图中显示不同的颜色。请让我知道我的代码可能在哪里抛出错误。我认为这是 key_on 参数但需要帮助。
这就是我的地图的结果。
enter image description here
我想要的是空气污染数据的平均浓度显示在地图上,但地图仍然是灰色的。
以下是我使用的文件:
Geojson 文件 - 使用本网站右上角的“下载 zip”https://gist.github.com/miguelpaz/edbc79fc55447ae736704654b3b2ef90#file-uhf42-geojson
数据文件 - 从此处导出数据 https://a816-dohbesp.nyc.gov/IndicatorPublic/VisualizationData.aspx?id=2023,719b87,122,Summarize
这是我的代码:
import geopandas as gpd
import folium
#clean pollution data
pm_df1 = pd.read_csv('/work/Fine Particulate Matter (PM2.5).csv',header = 5, usecols = ['GeoTypeName', 'Borough','Geography', 'Geography ID','Mean (mcg per cubic meter)'], nrows = 140)
#limit dataframe to rows with neighborhood (UHF 42) that matches geojson file
pm_df2 = pm_df1[(pm_df1['GeoTypeName'] == 'Neighborhood (UHF 42)')]
pm_df2
#clean geojson file
uhf_df2 = gpd.read_file('/work/uhf42.geojson', driver='GeoJSON')
uhf_df2.head()
#drop row 1 that has no geography
uhf_df3 = uhf_df2.iloc[1:]
uhf_df3.head()
## create a map
pm_testmap = folium.Map(location=[40.65639,-73.97379], tiles = "cartodbpositron", zoom_start=10)
# generate choropleth map
pm_testmap.choropleth(
geo_data=uhf_df3,
data=pm_df2,
columns=['Geography', 'Mean (mcg per cubic meter)'],
key_on='feature.properties.uhf_neigh', #think this is where I mess up.
fill_color='BuPu',
fill_opacity=0.2,
line_opacity=0.7,
legend_name='Average dust concentration',
smooth_factor=0)
# display map
pm_testmap
key_on的问题和你想的一样
两个数据上面都写着UHF的名字,但是形式完全不同。
为了link这两个,首先要对数据进行预处理。
我不知道你的数据。
如果你能df.head()
显示这两个数据就好了,但我会根据我通过你提供的link检查的数据进行解释。
在您的 geojson 文件中,uhf_neigh 只是说 Northeast Bronx
。但是,您的 PM 数据似乎将区域列为 Bronx: Northeast Bronx
。在绘制地图之前,似乎需要以下过程来统一您的本地名称。
uhf_df2['UHF_NEIGH'] = uhf_df2['BOROUGH']+ ': ' + uhf_df2['UHF_NEIGH']
我尝试使用您的数据和代码 运行 它,但它甚至没有显示地图。您的代码应该没有问题,因为您已将数据框中的地名与 geojson 中的地名相关联。我放弃了字符串关联,改成地名代码关联,地图显示出来了。提供的 csv 文件加载失败,所以我删除了不需要的行并加载了它。此外,我将文件作为 json 文件而不是 geopandas 读取。
import pandas as pd
import geopandas as gpd
import json
import folium
pm_df1 = pd.read_csv('./data/test_20211221.csv')
pm_df1 = pm_df1[['GeoTypeName', 'Borough', 'Geography', 'Geography ID', 'Mean (mcg per cubic meter)']]
pm_df2 = pm_df1[(pm_df1['GeoTypeName'] == 'Neighborhood (UHF 42)')]
with open('./data/uhf42.geojson') as f:
uhf_df3 = json.load(f)
pm_testmap = folium.Map(location=[40.65639,-73.97379], tiles = "cartodbpositron", zoom_start=10)
# generate choropleth map
pm_testmap.choropleth(
geo_data=uhf_df3,
data=pm_df2,
columns=['Geography ID', 'Mean (mcg per cubic meter)'],
key_on='feature.properties.uhfcode', #think this is where I mess up.
fill_color='BuPu',
fill_opacity=0.2,
line_opacity=0.7,
legend_name='Average dust concentration',
smooth_factor=0)
# display map
pm_testmap
我无法获取一些空气污染数据以在使用叶绿素的叶绿素图中显示不同的颜色。请让我知道我的代码可能在哪里抛出错误。我认为这是 key_on 参数但需要帮助。
这就是我的地图的结果。 enter image description here
我想要的是空气污染数据的平均浓度显示在地图上,但地图仍然是灰色的。
以下是我使用的文件:
Geojson 文件 - 使用本网站右上角的“下载 zip”https://gist.github.com/miguelpaz/edbc79fc55447ae736704654b3b2ef90#file-uhf42-geojson
数据文件 - 从此处导出数据 https://a816-dohbesp.nyc.gov/IndicatorPublic/VisualizationData.aspx?id=2023,719b87,122,Summarize
这是我的代码:
import geopandas as gpd import folium
#clean pollution data pm_df1 = pd.read_csv('/work/Fine Particulate Matter (PM2.5).csv',header = 5, usecols = ['GeoTypeName', 'Borough','Geography', 'Geography ID','Mean (mcg per cubic meter)'], nrows = 140) #limit dataframe to rows with neighborhood (UHF 42) that matches geojson file pm_df2 = pm_df1[(pm_df1['GeoTypeName'] == 'Neighborhood (UHF 42)')] pm_df2 #clean geojson file uhf_df2 = gpd.read_file('/work/uhf42.geojson', driver='GeoJSON') uhf_df2.head() #drop row 1 that has no geography uhf_df3 = uhf_df2.iloc[1:] uhf_df3.head() ## create a map pm_testmap = folium.Map(location=[40.65639,-73.97379], tiles = "cartodbpositron", zoom_start=10) # generate choropleth map pm_testmap.choropleth( geo_data=uhf_df3, data=pm_df2, columns=['Geography', 'Mean (mcg per cubic meter)'], key_on='feature.properties.uhf_neigh', #think this is where I mess up. fill_color='BuPu', fill_opacity=0.2, line_opacity=0.7, legend_name='Average dust concentration', smooth_factor=0) # display map pm_testmap
key_on的问题和你想的一样
两个数据上面都写着UHF的名字,但是形式完全不同。
为了link这两个,首先要对数据进行预处理。
我不知道你的数据。
如果你能df.head()
显示这两个数据就好了,但我会根据我通过你提供的link检查的数据进行解释。
在您的 geojson 文件中,uhf_neigh 只是说 Northeast Bronx
。但是,您的 PM 数据似乎将区域列为 Bronx: Northeast Bronx
。在绘制地图之前,似乎需要以下过程来统一您的本地名称。
uhf_df2['UHF_NEIGH'] = uhf_df2['BOROUGH']+ ': ' + uhf_df2['UHF_NEIGH']
我尝试使用您的数据和代码 运行 它,但它甚至没有显示地图。您的代码应该没有问题,因为您已将数据框中的地名与 geojson 中的地名相关联。我放弃了字符串关联,改成地名代码关联,地图显示出来了。提供的 csv 文件加载失败,所以我删除了不需要的行并加载了它。此外,我将文件作为 json 文件而不是 geopandas 读取。
import pandas as pd
import geopandas as gpd
import json
import folium
pm_df1 = pd.read_csv('./data/test_20211221.csv')
pm_df1 = pm_df1[['GeoTypeName', 'Borough', 'Geography', 'Geography ID', 'Mean (mcg per cubic meter)']]
pm_df2 = pm_df1[(pm_df1['GeoTypeName'] == 'Neighborhood (UHF 42)')]
with open('./data/uhf42.geojson') as f:
uhf_df3 = json.load(f)
pm_testmap = folium.Map(location=[40.65639,-73.97379], tiles = "cartodbpositron", zoom_start=10)
# generate choropleth map
pm_testmap.choropleth(
geo_data=uhf_df3,
data=pm_df2,
columns=['Geography ID', 'Mean (mcg per cubic meter)'],
key_on='feature.properties.uhfcode', #think this is where I mess up.
fill_color='BuPu',
fill_opacity=0.2,
line_opacity=0.7,
legend_name='Average dust concentration',
smooth_factor=0)
# display map
pm_testmap