Как я могу получить вывод графика 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 в FontForge как глифы и выведите файл шрифта
- Цвет фона модуля svgwrite Python
- преобразование латексного кода в mathml или svg-код в python
- Почему мой PNG, закодированный base64, не виден внутри моего svg?
- Библиотека для расчета путей SVG
Я знаю о 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 для отображения)
- проблема с отображением sympy rendered svg в python
- Как я могу сказать, что файл SVG без использования магического номера?
- Преобразование SVG в PNG в Python
- Простой графический API с прозрачностью, полигонами, считыванием пикселей изображения?
- Отображение текста при наведении указателя мыши - элемент Title непоследовательный, атрибут title ничего не делает
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")
- Быстрый способ фильтрации незаконных символов xml unicode в python?
- Библиотека для создания URL-адресов в Python