Как я могу получить вывод графика matplotlib как SVG?

Мне нужно взять вывод графика matplotlib и превратить его в SVG-путь, который я могу использовать на лазерной резце.

import matplotlib.pyplot as plt import numpy as np x = np.arange(0,100,0.00001) y = x*np.sin(2*pi*x) plt.plot(y) plt.show() 

Например, ниже вы видите форму волны. Я хотел бы иметь возможность выводить или сохранять этот сигнал в виде SVG-пути, с которым позже я смогу работать в такой программе, как Adobe Illustrator.

Я знаю о SVG-библиотеке под названием «Каир», которую может использовать matplotlib.use('Cairo') ( matplotlib.use('Cairo') ), однако мне не ясно, что это даст мне доступ к SVG-пути, который мне нужен, хотя matplotlib будет теперь используйте Каир для создания сюжета.

введите описание изображения здесь

У меня есть cairo, работающий в моей системе, и я могу успешно нарисовать пример, состоящий из SVG-путей, которые я действительно могу редактировать в Illustrator, но у меня нет способа принять мое уравнение выше в путь SVG.

 import cairo from cairo import SVGSurface, Context, Matrix s = SVGSurface('example1.svg', WIDTH, HEIGHT) c = Context(s) # Transform to normal cartesian coordinate system m = Matrix(yy=-1, y0=HEIGHT) c.transform(m) # Set a background color c.save() c.set_source_rgb(0.3, 0.3, 1.0) c.paint() c.restore() # Draw some lines c.move_to(0, 0) c.line_to(2 * 72, 2* 72) c.line_to(3 * 72, 1 * 72) c.line_to(4 * 72, 2 * 72) c.line_to(6 * 72, 0) c.close_path() c.save() c.set_line_width(6.0) c.stroke_preserve() c.set_source_rgb(0.3, 0.3, 0.3) c.fill() c.restore() # Draw a circle c.save() c.set_line_width(6.0) c.arc(1 * 72, 3 * 72, 0.5 * 72, 0, 2 * pi) c.stroke_preserve() c.set_source_rgb(1.0, 1.0, 0) c.fill() c.restore() # Save as a SVG and PNG s.write_to_png('example1.png') s.finish() 

введите описание изображения здесь

(обратите внимание, что отображаемое здесь изображение представляет собой png, поскольку stackoverflow не принимает графику svg для отображения)

2 Solutions collect form web for “Как я могу получить вывод графика matplotlib как SVG?”

Скорее всего, вы захотите исправить размер изображения и избавиться от всех видов фонов и маркеров оси:

 import matplotlib.pyplot as plt import numpy as np plt.figure(figsize=[6,6]) x = np.arange(0,100,0.00001) y = x*np.sin(2*pi*x) plt.plot(y) plt.axis('off') plt.gca().set_position([0, 0, 1, 1]) plt.savefig("test.svg") 

В результате SVG-файл содержит только один дополнительный элемент, так как savefig действительно хочет сохранить фон фигуры. Цвет этого фона легко изменить на «none», но, похоже, он не избавится от него. Во всяком случае, SVG очень чист в противном случае и в правильном масштабе (1/72 "на единицу).

В зависимости от используемого вами бэкэнда (я тестировал TkAgg и Agg) это должно быть так же просто, как указать его в вызове savefig ():

 import matplotlib.pyplot as plt import numpy as np x = np.arange(0,100,0.00001) y = x*np.sin(2*np.pi*x) plt.plot(y) plt.savefig("test.svg", format="svg") 
  • Может ли Django dev сервер правильно обслуживать SVG?
  • Heatmap в matplotlib с векторным форматом
  • Преобразование SVG в png или другое?
  • Есть ли скриптовый редактор SVG?
  • Получить абсолютные координаты для вращения элементов Inkscape SVG
  • Большой d3.js график, холст или рендеринг на стороне сервера?
  • python, matplotlib, svg и гиперссылки в текстовых меток
  • Inline SVG, обслуживаемый скриптом Python в Google App Engine, не отображается
  • Python - лучший язык программирования в мире.