Сохранение файлового объекта с помощью 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')
и т.п.