首页 > 解决方案 > 重用 matplotlib 子图的无花果和轴

问题描述

在图中创建 2 x 2 子图并保存该图。

示例代码:

def plot_all(i):
    fig, axes = plt.subplots(nrows = 2, ncols = 2, figsize = (20,10))   ## Takes the most time
    fig.suptitle('title')
    axes[0,0].plot(np.random.randn(3))
    axes[0,1].plot(np.random.randn(3))
    axes[1,0].plot(np.random.randn(3))
    axes[1,1].plot(np.random.randn(3))

    fig.savefig('my_plot{}.jpg'.format(i))
    plt.close(fig)

for i in range(10000):
    plot_all(i)

我认为“plot_all”函数的前两行在每次迭代中花费了大部分时间,所以我尝试重用 fig 和 axes,这样就不需要为下一次连续的绘图再次创建这些。有没有办法再次保存 fig 和 axes 以供下一次迭代?

标签: pythonpython-3.xmatplotlib

解决方案


我会这样做:

def plot_all(i, axes):
    axes[0,0].plot(np.random.randn(3))
    axes[0,1].plot(np.random.randn(3))
    axes[1,0].plot(np.random.randn(3))
    axes[1,1].plot(np.random.randn(3))


fig, axes = plt.subplots(nrows = 2, ncols = 2, figsize = (20,10))
fig.suptitle('title')
for i in range(3):
    plot_all(i, axes)
    fig.savefig('my_plot{}.jpg'.format(i))
    for ax in axes.flat:
        ax.cla()

推荐阅读