我一直在试图在基本地图上绘制一个形状文件。我在这里的问题是传说的位置。我想把它放在地图的外面(旁边)。
具体来说,我正在绘制shapefile的"Ecoregion“列,它基本上用颜色标记每个多边形(我认为这比将名称实际放置在每个多边形上要好)。我尝试了以下代码并收到了一个错误:
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)错误是-
WARNING:matplotlib.legend:No处理的标签被发现放在图例中。
所以我试着加入
legend-True在"ax“括号中删除”ax.legend(.)“,但图例显示在地图顶部,如下图所示。

“句柄”是指绘制的列吗?如果是这样的话,我不知道为什么会有这个错误。还是需要添加另一行代码?
如果能在这方面得到帮助,我将不胜感激。
(附件文件链接:https://drive.google.com/file/d/1OfOAstBbbxiqSybpl_CQf-o47YgpbY7D/view?usp=sharing)
发布于 2022-10-27 11:44:15
我也会考虑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'),
)

https://stackoverflow.com/questions/74219050
复制相似问题