programing

어떻게 하면 매트플롯립 플롯의 출력을 SVG로 얻을 수 있습니까?

bestprogram 2023. 8. 5. 10:44

어떻게 하면 매트플롯립 플롯의 출력을 SVG로 얻을 수 있습니까?

매트플롯립 플롯의 출력물을 레이저 커터에 사용할 수 있는 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와 같은 프로그램에서 작업할 수 있도록 하고 싶습니다.

matplotlib이 사용할 수 있는 "카이로"라는 SVG 라이브러리를 알고 있습니다.matplotlib.use('Cairo')), 그러나 matplotlib이 이제 카이로를 사용하여 플롯을 생성할 것이지만, 이것이 내가 필요로 하는 SVG 경로에 액세스할 수 있게 해줄지는 확실하지 않습니다.

enter image description here

저는 카이로가 제 시스템에서 작업하고 있고 일러스트레이터에서 편집할 수 있는 SVG 경로로 구성된 예제를 성공적으로 그릴 수 있지만 위의 방정식을 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()

enter image description here

(스택 오버플로는 디스플레이에 svg 그래픽을 허용하지 않으므로 여기에 표시된 이미지는 png입니다.)

이미지 크기를 수정하고 모든 종류의 배경 및 축 마커를 제거하고 싶을 것입니다.

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* np.pi * x)
plt.plot(y)
plt.axis('off')
plt.gca().set_position([0, 0, 1, 1])
plt.savefig("test.svg")

결과 SVG 파일에는 다음과 같은 추가 요소가 하나만 포함됩니다.savefig정말로 수치 배경을 저장하고 싶어합니다.이 배경의 색은 '없음'으로 바꾸기 쉽지만, 지워지지 않는 것 같습니다.어쨌든 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")

언급URL : https://stackoverflow.com/questions/24525111/how-can-i-get-the-output-of-a-matplotlib-plot-as-an-svg