Сохраните и перезагрузите объект matplotlib.pyplot - PullRequest
42 голосов
/ 03 сентября 2011

Я работаю в псевдооперативной среде, где мы делаем новые изображения при получении данных. Иногда, когда поступают новые данные, нам нужно заново открыть изображение и обновить его, чтобы создать композиты, добавить наложения и т. Д. Помимо добавления к изображению, это требует изменения заголовков, легенд и т. Д.

Есть ли что-то встроенное в matplotlib, которое позволило бы мне сохранить и перезагрузить мой объект matplotlib.pyplot для дальнейшего использования? Это должно было бы обеспечить доступ ко всем связанным объектам, включая фигуры, линии, легенды и т. Д. Возможно, рассол - это то, что я ищу, но я сомневаюсь в этом.

Ответы [ 4 ]

50 голосов
/ 04 октября 2012

По состоянию на 1.2 корабли matplotlib с экспериментальной поддержкой травления.Если у вас возникнут какие-либо проблемы с этим, пожалуйста, сообщите нам об этом в списке рассылки mpl или открыв выпуск на github.com/matplotlib/matplotlib

HTH

EDIT : Добавлен простой пример

import matplotlib.pyplot as plt
import numpy as np
import pickle

ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
pickle.dump(ax, file('myplot.pickle', 'w'))

Затем в отдельном сеансе:

import matplotlib.pyplot as plt
import pickle

ax = pickle.load(file('myplot.pickle'))
plt.show()
11 голосов
/ 21 июля 2016

Небольшая модификация ответа Пелсона для людей, работающих на Jupyterhub

Используйте %matplotlib notebook перед загрузкой маринада. Использование %matplotlib inline не работало для меня ни в ноутбуках jupyterhub, ни в jupyter. и дает обратную трассировку, заканчивающуюся в AttributeError: у объекта 'module' нет атрибута 'new_figure_manager_given_figure'.

import matplotlib.pyplot as plt
import numpy as np
import pickle

%matplotlib notebook

ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
with open('myplot.pkl','wb') as fid:
    pickle.dump(ax, fid)

Затем в отдельной сессии:

import matplotlib.pyplot as plt
import pickle

%matplotlib notebook

with open('myplot.pkl','rb') as fid:
    ax = pickle.load(fid)
plt.show()
2 голосов
/ 11 января 2012

Я сделал цифры для ряда статей, используя matplotlib.Вместо того, чтобы думать о сохранении рисунка (как в MATLAB), я написал бы сценарий, который наносил на график данные, затем форматировал и сохранял рисунок.В тех случаях, когда я хотел сохранить локальную копию данных (особенно, если я хотел снова иметь возможность играть с ней), я обнаружил numpy.savez () и numpy.load () , чтобы быть очень полезным.

Сначала я пропустил сжатое ощущение сохранения фигуры в MATLAB, но через некоторое время я предпочел этот подход, потому что он включает данные в формате, которыйдоступны для дальнейшего анализа.

0 голосов
/ 21 октября 2011

Вы пробовали модуль рассола? Он сериализует объект, выгружает его в файл и может позже перезагрузить из файла.

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