Сохранение файлового объекта с помощью matplotlib savefig, создание tar-файла из нескольких рисунков SVG

Я создал несколько фигур, используя Python с Matplotlib. PyQt5 используется в качестве бэкэнда для отображения рисунков. Я сохраняю цифры в формате SVG, используя savefig.

Моя проблема в том, что я хотел бы создать один zip-файл, содержащий все файлы svg. Упрощенная версия того, что у меня есть:

import matplotlib
figure = matplotlib.figure.Figure(dpi=72)
canvas = matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg(figure)
axes = figure.add_axes((0.1, 0.15, 0.85, 0.8))
axes.plot(data)
# Do all of that three times to give me three separate figures
# (let's call them figure, figure1 and figure2)

Теперь я могу сохранить каждую фигуру, используя

figure.savefig(filename, format='svg')
figure1.savefig .....

Но на самом деле я хотел бы иметь что-то вроде

fileobject = figure.savefig(format='svg')

где я мог бы использовать tarfile модуль для сжатия и хранения всего fileobjectс в одном архиве. Мой текущий обходной путь - сохранить файлы, прочитать их и использовать эти объекты для создания файла tar и последующего удаления оригиналов. Было бы неплохо иметь более прямой способ сделать это...

1 ответ

Решение

Вы можете использовать буферизованный поток для сохранения вашего файла в. Что-то вроде:

import io

fileobject1 = io.BytesIO()
figure1.savefig(fileobject1, format='svg')

fileobject2 = io.BytesIO()
figure2.savefig(fileobject2, format='svg')

и т.п.

Другие вопросы по тегам