使用"subplot2grid"方法将子图添加到特定图中

3

我正在尝试将不同大小的子图添加到特定的matplotlib图中,但不确定如何实现。如果只有一个图,则可以使用“subplot2grid”:

import matplotlib.pyplot as plt

fig = plt.figure()

ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2)
ax1 = plt.subplot2grid((2, 2), (1, 1))

plt.show()

上面的代码创建了一个图形,并向该图形添加了两个子图,每个子图具有不同的尺寸。现在,当有多个图形时,我遇到了问题--我找不到使用“subplot2grid”将子图添加到特定图形的适当方法。使用更简单的“add_subplot”方法,可以向特定图形添加子图,如下面的代码所示:
import matplotlib.pyplot as plt

fig1 = plt.figure()
fig2 = plt.figure()

ax1 = fig1.add_subplot(2, 2, 1)
ax2 = fig1.add_subplot(2, 2, 4)

plt.show()

我正在寻找一种类似的方法,可以使用某种网格管理器(例如“subplot2grid”),向特定图形中添加不同大小的子图。我对使用plt.“x”风格表示有所保留,因为它操作的是最后创建的图形--我的代码将有几个图形,所有这些图形我都需要有不同大小的子图。
提前感谢, Curtis M.

1
您可以设置当前图形,然后您的plt."x"样式命令将应用于您选择的任何图形。 - RuthC
1个回答

4
在未来(可能是即将发布的版本中),subplot2grid将会接受一个fig参数。请参考官方文档
subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)

使以下操作成为可能:

import matplotlib.pyplot as plt

fig1=plt.figure()
fig2=plt.figure()

ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2, fig=fig1)
ax2 = plt.subplot2grid((2, 2), (1, 1),  fig=fig1)

plt.show()

截至目前(版本2.0.2),这还不可能。作为替代方案,您可以手动定义底层GridSpec。

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig1=plt.figure()
fig2=plt.figure()

spec1 = GridSpec(2, 2).new_subplotspec((0,0), colspan=2)
ax1 = fig1.add_subplot(spec1)
spec2 = GridSpec(2, 2).new_subplotspec((1,1))
ax2 = fig1.add_subplot(spec2)

plt.show()

或者你可以简单地设置当前绘图,这样plt.subplot2grid将在该确切的绘图上工作(如此问题中所示)。

import matplotlib.pyplot as plt

fig1=plt.figure(1)
fig2=plt.figure(2)

# ... some other stuff

plt.figure(1) # set current figure to fig1
ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2)
ax2 = plt.subplot2grid((2, 2), (1, 1))

plt.show()

手动定义GridSpec非常好用。谢谢! - Curtis Mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接