jupyter上的folium空白等值线图,可能的JSON格式问题
Posted
技术标签:
【中文标题】jupyter上的folium空白等值线图,可能的JSON格式问题【英文标题】:folium blank choropleth map on jupyter, possible JSON format issue 【发布时间】:2020-12-08 02:55:18 【问题描述】:我一直在积极尝试找出为什么我在尝试在 folium 上生成等值线图时在我的 Jupyter 笔记本上得到一张空白地图。这也是我的第一篇文章,因为我对编程还很陌生。
通过搜索在线资源,最常见的问题是不正确的 key_on 使用,但我不认为是这种情况,它可能是 JSON 格式与 folium(epsg=4326) 不正确的情况。
https://raw.githubusercontent.com/CyperPunk001/Immigration-to-CA-from-RSA/master/canada_provinces.geojson 这是我用于笔记本的 github 存储库中的 JSON 文件,我不确定这是什么格式?
Canada COVID 19 cases这是我在笔记本上用于folium的当前数据框。
folium code for choropleth map 这是我用来生成 COVID 19 活跃病例与省/地区的等值线图的当前叶代码。问题是我每次都得到一张空白地图。
到目前为止我所尝试的:
导入 Json 并将我的数据框“prname”列名替换为实际的 Json feature.properties.name 省/地区名称。这并没有解决我的问题。
将“prname”重命名为“name”。这并没有解决我的问题。
检查“name”、“numactive”列的 dtype 是否是正确的类型,这检查出来了,这不会是他的问题吗? dtypes of dataframe
这让我看看我导入的 JSON 文件的格式是否与 folium 不兼容,所以我尝试导入 geopandas,或者更确切地说是安装,但可惜我也经常遇到导入错误。我已经尝试了所有代码行,但没有运气。 geopandas conda install
当前 folium 版本 0.11.0
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:好问题。使用 R 和传单库完成此绘图。
.geojson 文件没有任何问题。我将您的 .geojson 数据复制并粘贴到记事本文本编辑器中,然后使用 .geojson 扩展名保存它。文件被读取并且文件被绘制没有问题(未显示)。
使用这个 .geojson 文件,我从文件的 @data 槽中名为“name”的变量创建了标签。我还根据 @data 槽中的 X_2012_membership 值创建了填充颜色。
我使用 Jupyter Lab 作为带有 R 内核的 IDE。代码如下:
获取数据,探索数据:
dg <- rgdal::readOGR("C:/python/R_files/test/test.geojson")
# str(dg, max.level = 2)
head(dg@data,2)
head(dg@data$name,2)
创建标签和填充颜色:
labs <- dg@data$name
fill_col <- colorFactor(topo.colors(5), unique(dg@data$X_2012_membership ))
绘制数据:
leaflet(dg) %>%
addPolygons(
fillColor = ~factpal(dg@data$X_2012_membership),
stroke = TRUE,
color = 'White',
weight = 1.5,
label = labs,
labelOptions = labelOptions( noHide = T,
style = list("font-weight" = "normal", padding = "2px 2px"),
textsize = "7px",
direction = "auto"
)
)
链接处的情节: Canada
【讨论】:
嗨,格雷,感谢您确认 JSON 文件正常工作,但我可能不会在这个项目中使用 R。仅限 Python。此外,我需要按照上面的方法在数据框中创建名称和 numactive 列的等值线图,并将其与加拿大的省份进行对比,我相信 folium(Python 中的地理绘图模块)是另一种格式,因此当前输出为空白,我需要帮助来验证 JSON 格式是否与 folium 的格式不兼容。【参考方案2】:我已经设法解决了答案 - 似乎因为标题是双引号而不是单引号,所以地图显示为空白。 简单更改后,地图完美显示! 只是展示了这样一个小小的遗漏细节会如何导致......
之前: 请参阅上面的叶代码示例。
之后:
m = folium.Map(location=[56.130, -106.35],zoom_start=3.5, tiles = "Mapbox Bright")
m.choropleth(
geo_data=world_geo,
name='choropleth',
data=can_cov_yes_df,
columns=['name', 'numactive'],
key_on='feature.properties.name',
fill_color='YlOrRd',
threshold_scale=threshold_scale,
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Active Cases in Canadadian provinces'
)
folium.LayerControl().add_to(m)
m
现在地图显示:
【讨论】:
以上是关于jupyter上的folium空白等值线图,可能的JSON格式问题的主要内容,如果未能解决你的问题,请参考以下文章