将已经创建的 matplotlib 图形嵌套到一个新图形中

Nesting already created matplotlib figures to a new one

有没有办法将已经创建的图形嵌套在 matplotlib 中的新图形中,以便它们并排显示?

下面是我创建人物的方法。我使用 pypianoroll 库来绘制我的图形。 generate_random_multitrack 只是为了创建随机示例。

import numpy as np
from pypianoroll import Multitrack, Track

def generate_random_multitrack():
    prs = np.random.randint(128, size=(3, 16, 128))
    tracks = []
    for pr in prs:
        tracks.append(
            Track(pianoroll=pr)
        )
    return Multitrack(tracks=tracks)
mt1 = generate_random_multitrack()
mt2 = generate_random_multitrack()

例如 mt1.plot() returns 轴列表并创建此图

我想要这样的东西,左边是mt1,右边是mt2

我可以访问 .plot 调用

创建的图形和坐标轴
axes1 = mt1.plot()
fig1 = plt.gcf()
axes2 = mt2.plot()
fig2 = plt.gcf()

有没有办法将这两个图形并排嵌套在一个新的 matplotlib 图形中?

import matplotlib.pyplot as plt
fig = plt.figure()
# ... Can I nest fig1 and fig2 side to side inside fig?

在此先感谢您的帮助和评论。

根据their documentationpypianoroll支持axes论点。因此,您可以定义绘图布局并用轨道填充子图,例如,

import numpy as np
from pypianoroll import Multitrack, Track
import matplotlib.pyplot as plt

def generate_random_multitrack():
    prs = np.random.randint(128, size=(3, 16, 128))
    tracks = []
    for pr in prs:
        tracks.append(
            Track(pianoroll=pr)
        )
    return Multitrack(tracks=tracks)

fig, axes = plt.subplots(3, 2, sharex=True)

mt1 = generate_random_multitrack()
mt2 = generate_random_multitrack()

mt1.plot(axs=axes.flat[::2])
mt2.plot(axs=axes.flat[1::2])
plt.tight_layout()
fig.subplots_adjust(hspace=0)
plt.show()

示例输出: