desempenho do matplotlib savefig, salvando vários pngs no loop

Espero encontrar uma maneira de otimizar a seguinte situação. Eu tenho uma grande plotagem de contorno criada com imshow do matplotlib. Desejo, então, usar esse gráfico de contorno para criar um grande número de imagens png, onde cada imagem é uma pequena seção da imagem de contorno, alterando os limites xey e a proporção.

Portanto, nenhum dado de plotagem está sendo alterado no loop, apenas os limites do eixo e a proporção são alterados entre cada imagem png.

O seguinte MWE cria 70 imagens png em uma pasta "figs", demonstrando a idéia simplificada. Cerca de 80% do tempo de execução é ocupado porfig.savefig('figs/'+filename).

Analisei o seguinte sem apresentar uma melhoria:

Uma alternativa paramatplotlib com foco na velocidade - lutei para encontrar exemplos / documentação de plotagens de contorno / superfície com requisitos semelhantesMultiprocessamento - perguntas semelhantes que eu vi aqui parecem exigirfig = plt.figure() eax.imshow ser chamado dentro do loop, já que fig e machado não podem ser conservados em conserva. No meu caso, isso será mais caro do que qualquer ganho de velocidade obtido com a implementação do multiprocessamento.

Agradeço qualquer insight ou sugestão que você possa ter.

import numpy as np
import matplotlib as mpl
mpl.use('agg')
import matplotlib.pyplot as plt
import time, os

def make_plot(x, y, fix, ax):
    aspect = np.random.random(1)+y/2.0-x
    xrand = np.random.random(2)*x
    xlim = [min(xrand), max(xrand)]
    yrand = np.random.random(2)*y
    ylim = [min(yrand), max(yrand)]
    filename = '{:d}_{:d}.png'.format(x,y)

    ax.set_aspect(abs(aspect[0]))
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)
    fig.savefig('figs/'+filename)

if not os.path.isdir('figs'):
    os.makedirs('figs')
data = np.random.rand(25, 25)

fig = plt.figure()
ax = fig.add_axes([0., 0., 1., 1.])
# in the real case, imshow is an expensive calculation which can't be put inside the loop
ax.imshow(data, interpolation='nearest')

tstart = time.clock()
for i in range(1, 8):
    for j in range(3, 13):
        make_plot(i, j, fig, ax)

print('took {:.2f} seconds'.format(time.clock()-tstart))

questionAnswers(1)

yourAnswerToTheQuestion