尝试在 Geopandas 的同一图中绘制两个具有两个图例的地理数据框

问题描述 投票:0回答:1

我在与 geopandas 的同一地块中遇到多层问题。我分别成功地绘制了两个图例,但是要绘制两个图例(每个图例一个)我无法绘制。下面是读取数据集的代码。

dfGeo = pd.read_csv('drive/MyDrive/dfGeo.csv', sep=',').dropna()
dfGeo.drop_duplicates(subset=['Link'], inplace=True)
gdf = gpd.GeoDataFrame(dfGeo, geometry=gpd.points_from_xy(dfGeo.long, dfGeo.lat))
bairros = gpd.read_file('drive/MyDrive/bairros.geojson')

下面是绘制第一张带有图例的地图的代码。

fig, ax = plt.subplots(figsize=(10,20))
bairros.plot(column='rpa', legend=True, categorical=True, ax=ax)

first plot

这是第一个绘制两个图层的代码,每个图层都没有图例

fig, ax = plt.subplots(figsize=(10,20))
bins = mapc.Quantiles(gdf['Preco'], k=5).bins
ax.set_aspect('equal')
bairros.plot(ax=ax, color='gray', edgecolor='silver')
gdf.plot(ax=ax, marker='o', markersize=12, color='gold')
plt.show()

second plot

最后,代码尝试为每个图绘制图例,但没有成功,第二个图中出现了唯一的图例。

fig, ax = plt.subplots(figsize=(10,20))
bins = mapc.Quantiles(gdf['Preco'], k=5).bins
ax.set_aspect('equal')

# legend this doesn't appear
bairros.plot(column='rpa', legend=True, categorical=True, ax=ax)

# legend this appear    
gdf.plot(column='Preco', cmap='inferno', ax=ax, marker='o', markersize=12, legend=True, scheme="User_Defined", classification_kwds=dict(bins=bins))

plt.show()

third plot

我想绘制并将两者的传说放在同一个情节中。我怎样才能做到呢? Obs:我尝试了这个问题的解决方案,但输出发生了变化,没有任何图例。

第四个情节

提前致谢!

python matplotlib plot data-science geopandas
1个回答
0
投票

您需要使用

ax.get_legend
保存第一个图中的图例,然后使用
ax.add_artist
手动将其添加回来。这是一个最小的例子:

import geopandas as gpd
import matplotlib.pyplot as plt

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# subset to just a few countries in North America
gdf = gdf.loc[gdf.name.isin(['Canada', 'United States of America', 'Mexico'])]

gdf2 = gpd.GeoDataFrame(gdf.drop(columns='geometry'), geometry=gdf.centroid)

fig, ax = plt.subplots()
gdf.plot(column='name', ax=ax, legend=True)
leg1 = ax.get_legend() # save the legend from the first plot
gdf2.plot(column='continent', ax=ax, legend=True, legend_kwds={'loc': 'upper left'}, cmap='Pastel1')
ax.add_artist(leg1) # add the first legend back in

这会产生以下(无意义的)数字: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.