首页 > 解决方案 > 尝试重新定位 geopandas 图例时出现错误“没有带有标签的句柄”

问题描述

只要我不尝试更改其图例的位置,我的情节就可以正常工作。(我正在绘制一个 GeoDataFrame。)

# %%
ax = NE_shp.plot(column=NE_shp.iloc[:,4], figsize=(10,3), scheme='quantiles', edgecolor='k', k=10, legend=True)

#ax.legend(loc='upper left', bbox_to_anchor=(1, 1)) #This is the line for relocating legend

ax.set_title('The Map', fontsize=16)
ax.axis('off')

结果图: 没有图例位置设置

但是当我使用现在被屏蔽的行作为注释来更改图例位置时,会出现以下错误,并且图例未显示如下图

No handles with labels found to put in legend.

为图例设置位置后

(我怀疑它是否与scheme='quantiles'原因有关,它不是 matplotlib 固有的,而是由 pySAL 添加的。)

非常感谢您的建议。

标签: pythonmatplotliblegendgeopandas

解决方案


GeoDataFrame.plot提供一个legend_kwds参数,它需要一个字典。这本字典将传递给.legendor .colorbar,具体取决于您制作的情节类型。所以论点loc='upper left', bbox_to_anchor=(1, 1)需要像

gdf.plot(..., legend=True, legend_kwds=dict(loc='upper left', bbox_to_anchor=(1, 1)))

完整的可运行示例:

import geopandas as gpd
print(gpd.__version__)   ## 0.5
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt 

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) 
gdf['quant']=np.random.rand(len(gdf))*100-20

fig, ax = plt.subplots(figsize=(9,4))
fig.subplots_adjust(right=0.7)
gdf.plot(column='quant', scheme='quantiles', edgecolor='k', k=10, 
         legend=True, legend_kwds=dict(loc='upper left', bbox_to_anchor=(1, 1)), ax=ax)

plt.show()

在此处输入图像描述


推荐阅读