我在与 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)
这是第一个绘制两个图层的代码,每个图层都没有图例
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()
最后,代码尝试为每个图绘制图例,但没有成功,第二个图中出现了唯一的图例。
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()
我想绘制并将两者的传说放在同一个情节中。我怎样才能做到呢? Obs:我尝试了这个问题的解决方案,但输出发生了变化,没有任何图例。
提前致谢!
您需要使用
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