matplotlib 如何更改图例在Map中的位置?

dphi5xsq  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(131)

我一直在尝试在底图上绘制shapefile。我的问题是图例的位置。我希望图例放置在Map之外(旁边)。
具体来说,我正在绘制shapefile的“Ecogregion”列,它基本上用颜色标记每个多边形(我认为这比实际上在每个多边形上放置名称要好)。我尝试了以下代码,但收到了一个错误:

pip install geopandas
pip install contextily
import geopandas as gpd
import contextily as ctx
data = gpd.read_file("icemap.shp")
plt.rcParams.update({'font.size': 14})
ax = data.plot(
    figsize=(12, 10),
    column="Ecoregion",
    cmap="tab10",
    )
map = Basemap(
    llcrnrlon=-50,
    llcrnrlat=30,
    urcrnrlon=70.0,
    urcrnrlat=85.0,
    resolution="i",
    lat_0=39.5,
    lon_0=1,
)
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
map.fillcontinents(color="lightgreen")
map.drawcoastlines()
map.drawparallels(np.arange(10,90,20),labels=[1,1,1,1])
map.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1])
plt.title("Map", fontsize=16)

错误是-
警告:matplotlib.legend:未找到带标签的句柄以放入图例。
所以我试着加上

legend-True

在“ax”括号中,并删除了“ax.legend(...)",但随后图例出现在Map顶部,如下图所示。

“handle”是指绘制的列吗?如果是,我不明白为什么会出现这个错误。或者我需要添加另一行代码吗?
如果能在这方面得到帮助我会很感激的。
(附件链接:(第10页)

hi3rlvi2

hi3rlvi21#

我也会考虑Cartopy,因为Basemap已经过时很久了。矢量的分辨率也远远超过了屏幕上绘制的分辨率,所以你可以通过稍微简化它来提高性能。
但您可以沿着绘制Geodataframe时传递图例关键字。

ax = data.plot(
    figsize=(10, 8),
    column="Ecoregion",
    cmap="tab10",
    legend=True,
    legend_kwds=dict(bbox_to_anchor=(1.05, 1), loc='upper left'),
)

相关问题