Как я могу получить вывод графика 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") 
  • Форматы изображений PySide SVG не найдены?
  • PIL и векторная графика
  • Перевернутый глиф: растровое изображение> SVG через autotrace> glyph через fontforge
  • Изображения SVG не появляются после компиляции пионового кода PyQt4 с py2exe
  • Преобразование SVG в PNG в Python
  • Большой d3.js график, холст или рендеринг на стороне сервера?
  • Почему мой PNG, закодированный base64, не виден внутри моего svg?
  • интерактивный _standalone_ вывод от matplotlib
  • Рисование SVG на холсте Киви
  • проблема с отображением sympy rendered svg в python
  • Отображение SVG в ноутбуке IPython из функции
  • Python - лучший язык программирования в мире.