Как перебрать словарь ссылок на рисунки matplotlib - PullRequest
1 голос
/ 11 мая 2011

У меня есть ряд функций, каждая из которых создает одну или несколько фигур.По мере создания рисунков в словарь добавляется ссылка, например:

self.figures['figureKey'] = figure()

В другой функции я хотел бы выполнить итерацию этого словаря и сохранить каждую из фигур;было бы неплохо использовать ключ словаря как часть или все имя файла.Мне удалось перебрать словарь, но функция figure(), похоже, требует целое число, соответствующее номеру фигуры, отклоняя ссылку, заданную ключом.

    for fig in self.figures:
        figure(self.figures[fig])  #does not work
        figure(fig)                #also does not work
        savefig(fig)               #seems to let me use the key as a filename--nice

Я также пытался использовать `get_fignums() 'и итерирует возвращаемый массив, но это теряет связь с именами ключей.Возможно, можно разыскивать номер фигуры из указателя фигуры?У кого-нибудь есть хитрый подход к этому?

Пожалуйста, не поддавайтесь тенденции начинать ответ с фразы «почему бы тебе просто…». Ответ на этот вопрос заключается в том, что для меня это не был очевидный подход,Я новичок в этом.

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Может быть, я не совсем понимаю, что вы делаете ... Если вы просто хотите сохранить рисунок, почему бы не использовать метод fig объекта *1001*?

pyplot.savefig сохраняет активную фигуру, но при использовании метода fig.savefig конкретного экземпляра фигуры сохраняется эта конкретная фигура, независимо от того, какая из них активна.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

figures = [plt.figure() for _ in range(10)]

for i, fig in enumerate(figures):
    ax = fig.add_subplot(111)
    ax.plot(x, i*x)
    ax.axis('equal')

for i, fig in enumerate(figures):
    fig.savefig('temp_slope_%02i.png' % i)
1 голос
/ 11 мая 2011

Я мог бы что-то упустить здесь (на самом деле не пользователь Matplotlib), но разве вы не храните сами объекты фигур в словаре?Если это так, вы можете перебрать и ключи, и значения, используя for key, value in self.figures.items(), а затем получить номер фигуры, используя атрибут number.

В качестве теста я попробовал следующее с помощью интерактивного переводчика:

>>> import matplotlib.pyplot as plt
>>> figures = {}
>>> figures['name1'] = plt.figure()
>>> plt.plot([1, 2, 3])
>>> figures['name2'] = plt.figure()
>>> plt.plot([6, 5, 4])
>>> for key, figure in figures.items():
...     print 'Saving figure #%d as %s.' % (figure.number, key)
...     plt.figure(figure.number)
...     plt.savefig(key)
...
Saving figure #2 as name2
Saving figure #1 as name1

И это сработало: 2 графика (один монотонно увеличивающийся и один монотонно убывающий) были сохранены как PNGфайлы name1.png и name2.png в текущем каталоге.

1 голос
/ 11 мая 2011

Вы можете получить номер фигуры из экземпляра фигуры. Из документов :

Возвращенные объекты фигур имеют числовой атрибут, содержащий это число.

Таким образом, чтобы получить доступ к цифре по номеру, вы можете сделать это:

figure(self.figures[fig].number)

У меня не установлено matplotlib, чтобы проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...