python - 使用底图会破坏 gridspec 索引
问题描述
我正在尝试使用 gridspec 绘制两组地图,当我不包含底图时,它们的格式完美,但是一旦我这样做,第一张图像就会在其他图后面显示得更大,并且网格从第二张图像开始并显示依次,将最后一个图留空。
正确绘制(https://imgur.com/a/YNVOIgc):
包含底图,绘制不正确(https://imgur.com/a/uYfohiJ)
这是我重现问题的代码,要查看它是否正常工作,只需注释掉 m.drawcoastlines() 行。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from mpl_toolkits.basemap import Basemap
outer_grid = gridspec.GridSpec(2, 1, wspace=0.2, hspace=0.2)
#create plot
fig = plt.figure(figsize=(10, 8))
i=0
while i<2:
inner_grid = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=outer_grid[i], wspace=0.0, hspace=0.0)
n=0
while n<9:
ax = plt.Subplot(fig, inner_grid[n])
n=n+1
m = Basemap(lat_0=0,lon_0=0)
m.drawcoastlines()
fig.add_subplot(ax)
i=i+1
plt.suptitle('Gridspec/Basemap')
plt.show()
解决方案
你不应该使用plt.Subplot
. 而是在添加时直接创建子图
ax = fig.add_subplot(inner_grid[n])
虽然不是绝对必要的,但将轴作为参数添加到Basemap
;可能会有所帮助。这可能有助于记住实际使用了哪些轴。
m = Basemap(lat_0=0,lon_0=0, ax=ax)
完整代码:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from mpl_toolkits.basemap import Basemap
outer_grid = gridspec.GridSpec(2, 1, wspace=0.2, hspace=0.2)
#create plot
fig = plt.figure(figsize=(10, 8))
i=0
while i<2:
inner_grid = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=outer_grid[i], wspace=0.0, hspace=0.0)
n=0
while n<9:
ax = fig.add_subplot(inner_grid[n])
n=n+1
m = Basemap(lat_0=0,lon_0=0, ax=ax)
m.drawcoastlines()
i=i+1
plt.suptitle('Gridspec/Basemap')
plt.show()
推荐阅读
- python - 如何将下面显示的 excel 函数转换为 python pandas 代码?
- delphi - 是否有可能找出连接是否被计量?
- python - 使用 Matplotlib 和 Python 绘制两个直方图
- python - 如何从 html 页面中排除内容并仅保留 html 标签?
- ios - UINavigationItem 在 UINavigationBar 后面
- apache-spark - 如何为具有多个分区的 Kafka 主题启动多个消费者?
- php - 无法在 NGNIX 的服务器端生成 pdf
- laravel - 调度操作后获取 vuex 存储状态
- firebase - firebase admin nodejs 上的错误需要权限 iam.serviceAccounts.signBlob
- go - 如何在特定数据量中写入文件