matplotlib에서 테두리 없이 figure 안 그림만 저장하는 방법
matplotlib
를 쓰다 보면 figure의 안에 있는 그림만 저장하고 싶을 때가 있다. 일반적으로 figure를 그냥 출력하면 아래와 같다.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(range(10))
for item in [fig, ax]:
item.patch.set_visible(False)
fig.savefig("output4.png", bbox_inches="tight", pad_inches = 0)
일반적으로는 여기서 axis('off)
옵션을 주어서 x, y축을 지우고 출력하면 된다.
fig, ax = plt.subplots()
ax.plot(range(10))
fig.patch.set_visible(False)
ax.axis('off')
fig.savefig("output4.png", bbox_inches="tight", pad_inches = 0)
하지만 이 경우, 축이 차지하고 있던 공간은 사라졌지만 원래 축 바깥에 있던 margin은 그대로 있기 때문에 그림을 저장해보면 그래프에 테두리가 생기게 된다. 따라서 frameon=False
옵션을 처음에 figure를 만들 때 설정해주면 해당 마진이 사라지게 된다.
fig = plt.figure(frameon=False)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')
ax.plot(range(10))
마지막으로 plt.savefig
함수에서 그래프 주위에 기본적으로 boundary를 주게 되는데 이것도 아래 옵션을 사용하면 완벽히 제거할 수 있다.
fig.savefig("output4.png", bbox_inches="tight", pad_inches = 0)