我正在尝试使用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()
答案 0 :(得分:2)
您不应使用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()