使用 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的主要内容,如果未能解决你的问题,请参考以下文章
在带有子图的 geopandas 图中添加图例会改变图的大小