Matplotlib: Сохранение автономной редактируемой фигуры - PullRequest
1 голос
/ 12 марта 2020

Есть ли способ сохранить «рисунок» в matplotlib в файл, так что если вы позже захотите изменить рисунок, например, изменить точки данных, изменить размер рисунка и т. Д. c. Вы могли бы загрузить файл в новый скрипт python и сделать это?

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

Было бы неплохо, если бы я мог просто сохранить график как самостоятельную содержащийся файл данных, как это делает Photoshop со своими файлами .psd, так что я могу просто загрузить его напрямую, набрать «object.plot ()» и не беспокоиться о внешних зависимостях. Существует ли такой формат, или если нет, то каким образом я мог бы достичь этого?

1 Ответ

2 голосов
/ 12 марта 2020

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

fig = plt.figure
pl.dump(fig, file('file_name.pickle','w'))

и используя

fig = pl.load(open('file_name.pickle','rb'))
fig.show()

для загрузки сохраненного графика.

Matplotlib предупреждает, что «файлы Pickle не предназначены для длительного хранения и не поддерживаются при восстановлении маринада, сохраненного в другой версии Matplotlib». Чтобы быть в безопасности, я бы просто сохранил массив, содержащий данные для графика, в файл .csv или .txt и сохранил этот файл в папке с файлом python для построения графика. Таким образом, вы всегда сможете построить свои данные (независимо от используемой вами версии matplotlib). Вы также будете иметь данные и код в том же месте, и вы можете легко прочитать данные из файла .csv или .txt, сохранить их в массивы и построить график, используя

file = open("file_name.txt", "r")
if file.mode == 'r':
    data = f.read().splitlines()
    data_array1 = data[0].split(",")
    data_array2 = data[1].split(",")

p, = plt.plot(data_array1, data_array2)

Я также предлагаю выгрузка файлов python вместе с файлами .csv или .txt в Github.

Если вы хотите узнать больше о мариновании в matplotlib, я предлагаю прочитать две страницы, ссылки на которые приведены ниже. (1) маринованные фигуры из matplotlib и (2) https://matplotlib.org/3.1.3/users/prev_whats_new/whats_new_1.2.html#figures с возможностью взлома

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