Ошибка `Нет ручек с метками` при попытке переместить легенду geo pandas - PullRequest
1 голос
/ 21 января 2020

Мой сюжет работает нормально, пока я не пытаюсь изменить местоположение его легенды. (Я строю 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')

полученный рисунок: without legend position setting

Но когда я использую строку, которая теперь маскируется как комментарий, чтобы изменить положение легенды, выдается следующая ошибка, и легенда не отображается на рисунке ниже

No handles with labels found to put in legend.

After setting a position for legend

(Я подозреваю, что это как-то связано с scheme='quantiles', потому что оно не присуще matplotlib и добавлено pySAL.)

Большое спасибо за ваши предложения.

1 Ответ

5 голосов
/ 21 января 2020

GeoDataFrame.plot предоставляет аргумент legend_kwds, который ожидает словарь. Этот словарь будет передан либо .legend, либо .colorbar, в зависимости от того, какой тип сюжета вы производите. Таким образом, аргументы loc='upper left', bbox_to_anchor=(1, 1) должны будут go в этот словарь, например

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()

enter image description here

...