Como posso obter a saída de um gráfico matplotlib como um SVG?
Eu preciso pegar a saída de um gráfico matplotlib e transformá-lo em um caminho SVG que eu possa usar em um cortador a laser.
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 exemplo, abaixo, você vê uma forma de onda. Gostaria de poder gerar ou salvar essa forma de onda como um caminho SVG com o qual posso trabalhar posteriormente em um programa como o Adobe Illustrator.
Estou ciente de uma biblioteca SVG chamada "Cairo" que o matplotlib pode usar (matplotlib.use('Cairo')
), no entanto, não está claro para mim que isso me dará acesso ao caminho SVG que eu preciso, mesmo que o matplotlib agora esteja usando o Cairo para gerar o gráfico.
Eu tenho o cairo trabalhando no meu sistema e posso desenhar com sucesso um exemplo composto de caminhos SVG que posso editar no Illustrator, mas não tenho como levar minha equação acima para um caminho 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()
(observe que a imagem exibida aqui é um png, pois o stackoverflow não aceita gráficos svg para exibição)