Plot 使用Geopandas打印缺少的值

Plot 使用Geopandas打印缺少的值,plot,nan,geopandas,Plot,Nan,Geopandas,我的shapefile在某些列(例如GDP)上缺少一些值(由nan表示)。在不处理这些缺失值的情况下进行打印时,图例如下所示: 这不是我想要的。 因此,我用字符串“missing”替换缺少的值,然后重新绘制。毫不奇怪,我收到的错误消息说,TypeError:“GeoPandas此时不支持绘制缺失的值。这是计划在0.7版本中发布的。可能的解决方案是只打印那些没有缺失值的行,然后只打印缺失值。由于您没有给我们任何代码,下面是一个示例 将numpy导入为np 将matplotlib.pyplot作为

我的shapefile在某些列(例如GDP)上缺少一些值(由
nan
表示)。在不处理这些缺失值的情况下进行打印时,图例如下所示:

这不是我想要的。
因此,我用字符串“missing”替换缺少的值,然后重新绘制。毫不奇怪,我收到的错误消息说,
TypeError:“GeoPandas此时不支持绘制缺失的值。这是计划在0.7版本中发布的。可能的解决方案是只打印那些没有缺失值的行,然后只打印缺失值。由于您没有给我们任何代码,下面是一个示例

将numpy导入为np
将matplotlib.pyplot作为plt导入
作为gpd导入geopandas
导入pysal.viz.mapclassify作为mc
从matplotlib.colors导入rgb2hex
从matplotlib.colors导入ListedColormap
plt.style.use('seaborn')
gdf=gpd.read\u文件(gpd.datasets.get\u路径('naturalearth\u lowres'))
#生成随机数据
gdf['random']=np.random.normal(100,10,len(gdf))
#分配缺少的值
gdf.loc[np.random.choice(gdf.index,40),'random']=np.nan
这里的基本思想是根据要用于数字数据的分类方法(例如,分位数、百分位数等)创建类别/字符串列。之后,我们绘制该字符串列,以便传递自定义的colormap(用灰色表示缺少的值)

#对数字列进行分类
k=5
分位数=mc.quantiles(gdf.random.dropna(),k=k)
gdf['random_cat']=分位数.find_bin(gdf.random).astype('str'))
gdf.loc[gdf.random.isnull(),'random_cat']=“无数据”
#将灰色添加到颜色贴图以表示缺少的值
cmap=plt.cm.get_cmap('Blues',k)
cmap_list=[rgb2hex(cmap(i))表示范围内的i(cmap.N)]
cmap_列表。追加('灰色')
带有灰色的cmap\U=列表颜色映射(cmap\U列表)
#绘图
图,ax=plt.子批次(图尺寸=(12,10))
gdf.绘图(列='random_cat',edgecolor='k',cmap=cmap_,带灰色,
图例=True,图例=dict(loc='中间偏左'),
ax=ax)
#获取分位数类别中的所有上界
上界=分位数.bins
#获取并格式化所有边界
界限=[]
对于索引,枚举中的上界(上界):
如果索引==0:
下限=gdf.random.min()
其他:
下界=上界[索引-1]
bound=f'{下限:.2f}-{上限:.2f}'
追加(绑定)
#获取所有图例标签
legend_labels=ax.get_legend().get_text()
#替换数字图例标签
对于绑定,zip中的图例标签(绑定,图例标签):
图例\标签。设置\文本(绑定)

您可能需要查看以下帖子:


自geopandas更新
0.8.1

现在,您只需在plot函数中传递一个
missing_kwds
arg即可:

fig,ax=plt.子批次(figsize=(12,10))
缺少内容(颜色为灰色,标签为无数据)
gdf.绘图(列='随机',方案='分位数',k=5,
图例=True,图例=dict(loc='中间偏左'),
缺失(kwds=缺失(kwds,ax=ax)

更新:
geopandas
中的新功能解决了您的问题:您可以将缺少的值保留为
NaN
并使用:

ax = gdf.plot( <other arguments>, 
       missing_kwds = dict(color = "lightgrey",) )
ax=gdf.plot(,
缺少\u kwds=dict(color=“lightgrey”,)
使所有缺失的数据区域呈浅灰色


(事实上,文档可能会说参数
缺失_kwdsdict
,但上面的内容对我有效)

这是有效的。还有一个问题,即如何在图例上显示缺失?我也看过这个剧本,但它也没有表现出传奇的缺失。如果缺少一些小区域,地图上可能看不到。但如果有大面积的缺失,最好在图例上显示缺失。你能给我一个解决办法吗?谢谢。这有github问题吗?你能把链接贴在这里吗@martinfleis@steven干得好。同样在中讨论。副本?如果可以的话,我会给这个答案一颗星星!非常感谢,工作完美无瑕,我学到了很多。
ax = gdf.plot( <other arguments>, 
       missing_kwds = dict(color = "lightgrey",) )