首页 > 解决方案 > 使用底图会破坏 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()

标签: pythonmatplotlibmatplotlib-basemap

解决方案


你不应该使用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()

在此处输入图像描述


推荐阅读