Это было бы отличной функцией, но AFAIK она не реализована в Matplotlib и, вероятно, будет трудно реализовать самостоятельно из-за того, как хранятся цифры.
Я бы предложил либо (а) отдельную обработку данных от генерации фигуры (которая сохраняет данные с уникальным именем) и написать сценарий генерации фигуры (загрузка указанного файла с сохраненными данными) и редактирование по своему усмотрению, либо (б ) сохраните в формате PDF / SVG / PostScript и отредактируйте в каком-нибудь необычном редакторе рисунков, таком как Adobe Illustrator (или Inkscape ).
РЕДАКТИРОВАТЬ сообщение Осень 2012 : как другие указывали ниже (хотя здесь упоминается, как это принятый ответ), Matplotlib с версии 1.2 позволяет вам мариновать цифры. Как указано в примечаниях к выпуску , это экспериментальная функция, которая не поддерживает сохранение рисунка в одной версии matplotlib и открытие в другой. Также, как правило, небезопасно восстанавливать рассол из ненадежного источника.
Для совместного использования / последующего редактирования графиков (которые сначала требуют значительной обработки данных и могут потребоваться несколько месяцев спустя, например, во время экспертной оценки научной публикации), я все же рекомендую рабочий процесс (1) иметь сценарий обработки данных, который перед созданием графика сохраняет обработанные данные (которые входят в ваш график) в файл и (2) имеет отдельный сценарий создания графика (который вы настраиваете по мере необходимости) для воссоздания графика. Таким образом, для каждого графика вы можете быстро запустить сценарий и повторно сгенерировать его (и быстро скопировать настройки графика с новыми данными). Тем не менее, выбор фигуры может быть удобен для краткосрочного / интерактивного / исследовательского анализа данных.
pickle
теперь работает с фигурами MPL, так что это можно сделать и, похоже, работает неплохо - почти как файл фигур Matlab ".fig". См. Мой ответ ниже (пока?), Чтобы увидеть, как это сделать.Я только что узнал, как это сделать. «Экспериментальная поддержка рассола», упомянутая @pelson, работает довольно хорошо.
Попробуй это:
После интерактивной настройки сохраните объект-фигуру как двоичный файл:
Позже откройте рисунок, и настройки должны быть сохранены, а интерактивность графического интерфейса должна присутствовать:
Вы даже можете извлечь данные из графиков:
(Он работает для линий, pcolor и imshow - pcolormesh работает с некоторыми уловками для восстановления сглаженных данных .)
Я получил отличный совет от Сохранения фигур Matplotlib с помощью Pickle .
источник
pickle
документации указано, что нам нужно настроить среду так же, как когда объект был маринован (сохранен), но я обнаружил, что вам не нужно этоimport matplotlib.pyplot as plt
при распаковке (загрузке) - он сохраняет операторы импорта в маринованном файле ,with open('FigureObject.fig.pickle', 'rb') as file: figx = pickle.load(file)
figx.show()
, вам следуетplt.show()
вместо этого вызвать , что является блокирующим.Начиная с Matplotlib 1.2, теперь у нас есть экспериментальная поддержка pickle . Попробуйте и посмотрите, подходит ли он для вашего случая. Если у вас есть какие-либо проблемы, сообщите нам об этом в списке рассылки Matplotlib или открыв вопрос на github.com/matplotlib/matplotlib .
источник
PicklingError: Can't pickle <type '_macosx.GraphicsContext'>: it's not found as _macosx.GraphicsContext
.PicklingError
происходит только в том случае, если вы позвонитеplt.show()
перед тем, как делать рассол. Так что просто ставьтеplt.show()
послеpickle.dump()
.fig.show()
не имеет значения - возможно, эта ошибка была исправлена. Я могу мариновать до и послеshow()
без проблем.Почему бы просто не отправить скрипт Python? Файлы .fig MATLAB требуют, чтобы получатель имел MATLAB для их отображения, так что это примерно эквивалентно отправке скрипта Python, который требует отображения Matplotlib.
В качестве альтернативы (отказ от ответственности: я еще не пробовал) вы можете попробовать травить фигуру:
источник
MyPlot.fig.pickle
файл, сохранив при этом возможность настраивать представление графика по мере необходимости. Это также то, что замечательно в.fig
файлах Matlab . Особенно полезно, когда вам нужно изменить размер / соотношение сторон инжира (для вставки в презентации / документы).Хороший вопрос. Вот текст документа
pylab.save
:источник
pylab.save
. В самом деле, из текста дока, оказывается , что нужно не использовать его.Я придумал относительно простой (но немного нетрадиционный) способ сохранить мои цифры matplotlib. Это работает так:
с функцией,
save_plot
определенной таким образом (простая версия для понимания логики):или определение
save_plot
такой функции (лучшая версия, использующая сжатие zip для создания более легких файлов фигур):Для этого используется
libscript
мой собственный модуль , который в основном полагается на модулиinspect
иast
. Я могу попытаться поделиться им на Github, если будет проявлен интерес (сначала потребуется некоторая очистка, и я начну с Github).Идея этой
save_plot
функции иlibscript
модуля состоит в том, чтобы получить инструкции python, которые создают фигуру (используя модульinspect
), проанализировать их (используя модульast
), чтобы извлечь все переменные, функции и модули, на которые он опирается, извлечь их из контекста выполнения и сериализовать их. как инструкции python (код для переменных будет похож наt=[0.0,2.0,0.01]
... а код для модулей будет похож наimport matplotlib.pyplot as plt
...), добавленные к инструкциям рисунка. Результирующие инструкции python сохраняются в виде сценария python, выполнение которого воссоздает исходную фигуру matplotlib.Как вы понимаете, это хорошо работает для большинства (если не для всех) фигур matplotlib.
источник