python - 在带有子图的 geopandas 图中添加图例会改变图的大小
问题描述
我想用 matplotlib 子图绘制两个 GeoPandas 图。两张地图有相同的图例,因此我只想有一个图例。但是,如果我在其中一个 GeoPandas 图中添加图例,则该图会稍微变小。这是一个问题,因为这两个地块的大小不同。
这是我的代码:
fig,ax = plt.subplots(1, 2, figsize=(12,8))
sealand_grid.plot(column=sealand_grid['p_2012'],
ax=ax[0],
cmap='magma')
sealand_grid.plot(column=sealand_grid['p_2013'],
ax=ax[1],
cmap='magma',
legend=True,
legend_kwds={'shrink': 0.3})
ax[0].set_title('Housing prices 2012', fontsize=18)
ax[1].set_title('Housing prices 2013', fontsize=18)
fig.patch.set_facecolor('xkcd:white')
ax[0].axis('off')
ax[1].axis('off')
fig.tight_layout()
sealand_grid
我的 GeoPandas 数据框在哪里,p_2012
并且p_2013
是在两张地图中绘制的变量。
如何使两张地图的大小相同,而只有一个图例?
解决方案
为了重现您的问题,我使用了这段代码,它基本上显示了相同的结果:由于颜色条,右侧的图像比左侧的图像略小。
import matplotlib.pyplot as plt
import numpy as np
D2012 = np.random.rand(10, 10)
D2013 = np.random.rand(10, 10)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize = (16,8))
P2012 = ax1.imshow(D2012,
cmap = 'magma')
P2013 = ax2.imshow(D2013,
cmap = 'magma')
ax1.set_title('2012', fontsize = 18)
ax2.set_title('2013', fontsize = 18)
ax1.axis('off')
ax2.axis('off')
plt.colorbar(P2013)
plt.show()
这给出了这个情节:
我解决了这个转变:
import matplotlib.pyplot as plt
import numpy as np
D2012 = np.random.rand(10, 10)
D2013 = np.random.rand(10, 10)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize = (16,8))
ax3 = fig.add_axes([0.85, 0.1, 0.1, 0.8])
P2012 = ax1.imshow(D2012,
cmap = 'magma')
P2013 = ax2.imshow(D2013,
cmap = 'magma')
ax1.set_title('2012', fontsize = 18)
ax2.set_title('2013', fontsize = 18)
ax1.axis('off')
ax2.axis('off')
ax3.axis('off')
plt.colorbar(P2013, ax = ax3)
plt.show()
这给出了这个情节:
基本上,我添加了第三个轴,将其关闭并添加颜色条。您需要使用方法内部的参数注意第三个轴的位置:fig.add_axes([0.85, 0.1, 0.1, 0.8])
.
我知道这肯定不是最优雅的解决方案。
编辑
更健壮和优雅的解决方案是保留 2 个轴,但在定义它们时设置它们的大小和位置:
import matplotlib.pyplot as plt
import numpy as np
D2012 = np.random.rand(10, 10)
D2013 = np.random.rand(10, 10)
fig = plt.figure(figsize = (16,8))
ax1 = fig.add_axes([0, 0.2, 0.6, 0.6])
ax2 = fig.add_axes([0.4, 0.2, 0.6, 0.6])
P2012 = ax1.imshow(D2012,
cmap = 'magma')
P2013 = ax2.imshow(D2013,
cmap = 'magma')
ax1.set_title('2012', fontsize = 18)
ax2.set_title('2013', fontsize = 18)
ax1.axis('off')
ax2.axis('off')
plt.colorbar(P2013)
plt.show()
这给出了这个情节:
在这种情况下,您必须使用这些线注意两个轴的位置和大小:
ax1 = fig.add_axes([0, 0.2, 0.6, 0.6])
ax2 = fig.add_axes([0.4, 0.2, 0.6, 0.6])
推荐阅读
- r - How to create a logical vector that indicates whether the values in two columns are the same across categorical factors in R?
- java - 使用模 % 时 Ruby 与 Java 的差异
- smtp - SMTP 反向 DNS 不匹配问题
- azure - 更新后的 MS Azure 组织结构中的帐户是什么?
- excel - Web 抓取表格中的文本
- python - 如何将pytorch张量列表分离到数组
- android - setBypassDnd 和 setLockscreenVisibility 只能由系统修改
- python - if 语句在满足其定义之前不会停止运行
- javascript - 如何为动态组件传递道具/对象的所有值
- python-3.x - 从python中的表中删除sqllite3数据