使用 geopandas 从热图中的图例中删除 NaN

Posted

技术标签:

【中文标题】使用 geopandas 从热图中的图例中删除 NaN【英文标题】:Removing NaN from legend in Heatmap using geopandas 【发布时间】:2020-02-07 22:33:39 【问题描述】:

我正在尝试使用 geopandas 绘制每个国家/地区的 Mirai 僵尸网络感染热图。我有一个结构如下的地理数据框:

geometry    Country_Code    Infection_Rate
0   MULTIPOLYGON (((11108970.260 445285.130, 11108...   IDN 0.01616
6   POLYGON ((3008931.293 3740791.337, 3007063.917...   NaN nan
7   MULTIPOLYGON (((3009012.519 3740778.293, 30089...   CYP 0.06845
8   MULTIPOLYGON (((6915098.813 3796247.587, 69170...   IND 0.0076

从结构中可以清楚地看出,存在一些缺失值,因为某些国家/地区的感染率未知

我将热图绘制如下:

## Some plot settings
colors = 6
cmap = 'Blues'
figsize = (16, 10)
plotvar = 'Infection_Rate'
scheme = 'equalinterval'
title = 'Infection rate per country (%)'
lables = ['0', '1', '2', '3','4','5']

## Create the plot
ax = geoinfect.plot(plotvar, cmap=cmap, figsize=figsize, k = colors, scheme = scheme,  legend=True)
ax.set_title(title, fontdict='fontsize': 20, loc='left')
ax.set_axis_off()
ax.set_xlim([-1.5e7, 1.7e7])
legend.set_bbox_to_anchor((.52, .4))

## Highlight missing values in grey
geoinfect[geoinfect.isna().any(axis=1)].plot(ax=ax, color='#D3D3D3')

这给了我以下结果:Heatmap

除了样式不好之外,我对这个情节的主要问题是图例的第一个标签是“nan-0.21”而不是“0-0.21”

我是否可以手动编辑图例,使第一个标签显示“0-0.21”?

请原谅这是一个明显的错误,我对编程很陌生:)

【问题讨论】:

【参考方案1】:

首先,在绘制输出之前修改地理数据框。您可以将“Infection_Rate”列中的“nan”值替换为“0”。 以下代码应为您提供所需的输出。

geodataframe.Infection_Rate = geodataframe.Infection_Rate.replace("nan": "0")

现在您可以使用上述数据框绘制热图了。

【讨论】:

这给了我以下错误:TypeError:无法比较类型 'ndarray(dtype=float64)' 和 'str'。此外,我想将缺失值绘制为灰色,以便清楚地了解数据缺失的国家/地区。所以我认为这不能解决问题 @NickHoSamSooi 请提供可用于重现问题的数据框样本。您提供的地理数据框无法加载到重现问题的数据框中。【参考方案2】:

由于您要单独绘制缺失值,因此您只能先绘制没有 NaN 的行,因此您的图例自然会是 0-。

ax = geoinfect[~geoinfect.isna().any(axis=1)].plot(plotvar, cmap=cmap, figsize=figsize, k = colors, scheme = scheme,  legend=True)

ax.set_title(title, fontdict='fontsize': 20, loc='left')
ax.set_axis_off()
ax.set_xlim([-1.5e7, 1.7e7])
legend.set_bbox_to_anchor((.52, .4))

## Highlight missing values in grey
geoinfect[geoinfect.isna().any(axis=1)].plot(ax=ax, color='#D3D3D3')

【讨论】:

以上是关于使用 geopandas 从热图中的图例中删除 NaN的主要内容,如果未能解决你的问题,请参考以下文章

如何在图像热图(python)中设置图例?

在带有子图的 geopandas 图中添加图例会改变图的大小

为我的热图添加图例

向 GeoPandas 图例添加自定义名称

使用 Matplotlib 在带有图例的热图中显示不同大小的圆圈

Plotly:热图颜色图例我的子图