Я использую matplotlib для создания фигуры со многими небольшими подзаголовками (что-то вроде 4 строк, 8 столбцов). Я пробовал несколько разных способов, и самое быстрое, что я могу получить matplotlib для создания осей, составляет ~ 2 секунды. Я видел this post о простом объекте с одной осью, чтобы отображать много маленьких изображений, но я хотел бы иметь тики и названия на осях. Есть ли способ ускорить этот процесс или сделать топоры в matplotlib достаточно долго?Matplotlib - Быстрый способ создания множества подзаголовков?
Вот что я пытался до сих пор:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import time
fig = plt.figure(figsize=(10,6))
plt.clf(); t = time.time()
grid = ImageGrid(fig, 111,
nrows_ncols = (4, 8))
print 'Time using ImageGrid: %.2f seconds'%(time.time()-t)
plt.clf(); t = time.time()
axes = plt.subplots(4,8)
print 'Time using plt.subplots: %.2f seconds'%(time.time()-t)
plt.clf(); t = time.time()
axes = []
for row in range(0,4):
for col in range(1,9):
ax = plt.subplot(4,8,row*8+col)
axes.append(ax)
print 'Time using ptl.subplot loop: %.2f seconds'%(time.time()-t)
выход:
Time using ImageGrid: 4.25 seconds
Time using plt.subplots: 2.11 seconds
Time using ptl.subplot loop: 2.34 seconds
Принимая предложение Джо Kington, я попытался засолить фигуру и оси так, что я бы на по крайней мере, не нужно создавать их каждый раз, когда я запускаю скрипт. Тем не менее, загрузка файла на самом деле занимает больше времени:
import matplotlib.pyplot as plt
import pickle
import time
t = time.time()
fig,axes = plt.subplots(4,8,figsize=(10,6))
print 'Time using plt.subplots: %.2f seconds'%(time.time()-t)
pickle.dump((fig,axes),open('fig.p','wb'))
t = time.time()
fig,axes = pickle.load(open('fig.p','rb'))
print 'Time to load pickled figure: %.2f seconds'%(time.time()-t)
выход:
Time using plt.subplots: 2.01 seconds
Time to load pickled figure: 3.09 seconds
Хорошо, хорошо знать, что я не могу сделать намного лучше, чем plt.subplots(). Я не делаю анимацию, просто фигуру с большим количеством небольших сюжетов. Поэтому, когда я делаю изменения фигуры, мне нужно перезапустить скрипт и подождать несколько секунд, чтобы настроить подзаголовки. Возможно, это не будет узким местом, но все же раздражает несколько секунд, что мне нужно подождать. Спасибо за Ваш ответ! – DanHickstein
Это имеет смысл. Пара-второе отставание, конечно, вызывает раздражение, когда вы пытаетесь настроить различные вещи и повторно запустить. Одна вещь, которую вы можете сделать, - это попробовать «чистую» фигуру с сеткой подзаголовков, а затем загружать маринованную версию, а не создавать новую. В этом конкретном случае это довольно быстро. –
Я пробовал метод травления, но на самом деле это занимает больше времени, чем создание подзаговоров. Но, возможно, я неправильно использую модуль рассола. Я добавил это в нижнюю часть вопроса. – DanHickstein