¿Cómo puedo obtener la salida de un diagrama matplotlib como SVG?
Necesito tomar la salida de un diagrama matplotlib y convertirlo en una ruta SVG que pueda usar en una cortadora láser.
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()
Por ejemplo, debajo ves una forma de onda. Me gustaría poder generar o guardar esta forma de onda como una ruta SVG con la que luego pueda trabajar en un programa como Adobe Illustrator.
Soy consciente de una biblioteca SVG llamada "Cairo" que matplotlib puede usar (matplotlib.use('Cairo')
), sin embargo, no está claro para mí que esto me dé acceso a la ruta SVG que necesito, aunque matplotlib ahora usará Cairo para generar la trama.
Tengo cairo trabajando en mi sistema, y puedo dibujar con éxito un ejemplo compuesto por rutas SVG que puedo editar en Illustrator, pero no tengo una manera de llevar mi ecuación anterior a una ruta 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()
(tenga en cuenta que la imagen que se muestra aquí es un png, ya que stackoverflow no acepta gráficos svg para mostrar)