Notice
Recent Posts
Recent Comments
Link
관리 메뉴

뛰는 놈 위에 나는 공대생

[Matplotlib] Matplotlib savefig 기능 정리 본문

프로그래밍 Programming/파이썬 Python

[Matplotlib] Matplotlib savefig 기능 정리

보통의공대생 2022. 8. 21. 17:55

 

Matplotlib은 figure를 도출하기 위해 중요한 라이브러리이다.

이 figure를 파일로 저장하기 위해서는 savefig라는 함수를 쓰는데 이 함수에서 설정할 수 있는 것들에 대해 이야기하려고 한다.

 


1. savefig의 argument

savefig(fname, *, dpi='figure', format=None, metadata=None,
        bbox_inches=None, pad_inches=0.1,
        facecolor='auto', edgecolor='auto',
        backend=None, **kwargs
       )

 

위의 savefig argument에서 fname은 저장할 파일이름이다.

여기에서 확장자를 지정하지 않으면 default로 png 파일로 저장한다.

format에서도 확장자를 지정할 수 있다.

 

dpi는 이미지의 resolution인데, (dots per inch)라는 뜻이다. 일반적으로 인쇄물에 넣는 png의 해상도는 아주 높아야할 것이다. 최소 300에서 높게는 600-800까지.

하지만 인쇄물에 쓸 거라면 pdf, eps와 같은 벡터 이미지 저장을 권장한다.

 

 

2. bbox_inches & pad_inches

 

bbox_inches는 figure가 저장되는 bounding box를 의미한다. 기본적으로는 None으로 되어있어서 figure 그대로를 저장하게 되고, 'tight'라고 설정하면 figure 안에서 제일 작게 만들 수 있는 영역만 지정하게 된다. 즉, figure 주변의 여백을 모두 제거한다.

 

예를 들어 내가 figsize를 500x500 pixels로 지정했는데, axes fontsize를 다르게 한 경우를 보자.

 

 

위의 두 사진은 테두리 포함 크기가 동일하다. (구별하기 쉽도록 테두리는 tistory의 기능으로 추가한 것이다.)

그런데 axes의 font 크기가 달라서 두 그림의 여백이 다르게 된다. 즉, matplotlib 자체 내에서 figsize를 유지하면서 흰 여백을 그림에 맞게 추가한다는 뜻이다.

 

내가 'tight'로 설정하면 이런 여백이 날아가게 된다.

 

그리고 pad_inches에서는 bbox_inches에서 'tight'라고 지정할 때 추가적으로 붙여주는 padding의 크기를 의미한다. default로 0.1inch로 되어있다.

 

따라서 어떤 이미지를 저장할 때 아래와 같이 설정한다고 하자.

plt.savefig(fname='image.png', bbox_inches='tight', pad_inches=0)

 

 

그러면 내가 저장하고 싶은 figure에서 축과 그림을 제외한 나머지는 날아간 채로 저장하게 된다.

그런데 이럴 경우에는 내가 지정해놓은 figsize와 다른 figure 크기가 될 수 있다고 stackoverflow에 나와있다.따라서 본인이 원하는 figure size를 유지할 때는 bbox_inches를 'tight'로 두는 것을 권장하지 않는다.

 

 

3. face_colors & edge_colors

 

이 기능은 3.6부터 error를 발생시키는 argument이므로 설명하지 않는다.

Comments