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格式问题的主要内容,如果未能解决你的问题,请参考以下文章

怎样用ArcGis中的Kriging插值法绘制等值线图

找不到 Python 3.6 模块:Folium

Altair 等值线图,基于折线图选择的颜色高亮

在 WPF 中使用 D3 创建等值线图

添加下拉按钮以绘图表达等值线图

是否可以在 R 中读取 geoJSON 或 topoJSON 文件来绘制等值线图?