[python] 플롯을 Matplotlib을 사용하여 표시하는 대신 이미지 파일에 저장하십시오.


5 Answers

해결책은 다음과 같습니다.

pylab.savefig('foo.png')
Question

나는 즉시 플롯을 생성하기 위해 빠르고 더러운 스크립트를 작성 중이다. Matplotlib 문서의 아래 코드를 시작점으로 사용하고 있습니다.

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

GUI에서 플롯을 표시하고 싶지 않고 플롯을 파일 (예 : foo.png)에 저장하여 일괄 스크립트에서 사용할 수 있습니다. 어떻게해야합니까?




이 문제를 정확히 다루는 MatPlotLib 문서에서이 링크를 찾았습니다. http://matplotlib.org/faq/howto_faq.html#generate-images-without-having-a-window-appear

그림이 팝업되지 않도록하는 가장 쉬운 방법은 matplotib.use(<backend>) 를 통해 matplotib.use(<backend>) 형 백엔드 (예 : Agg)를 사용하는 matplotib.use(<backend>) 예 :

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('myfig')

나는 여전히 개인적으로 plt.close( fig ) 사용하는 것을 선호한다. 그 이유는 (루프 동안) 특정 수치를 감추는 옵션을 가지고 있지만 포스트 루프 데이터 처리를위한 수치를 여전히 표시하기 때문이다. 비대화 형 백엔드를 선택하는 것보다 속도가 느릴 수 있습니다 - 누군가 테스트 한 경우 흥미로울 것입니다.




다른 대답은 정확합니다. 그러나 나중에 그림 개체 를 열려고하는 경우가 있습니다. 예를 들어, 레이블 크기를 변경하거나 눈금을 추가하거나 다른 처리를 원할 수 있습니다. 완벽한 세계에서 플롯을 생성하는 코드를 다시 실행하고 설정을 적용하기 만하면됩니다. 아아, 세상은 완벽하지 않습니다. 따라서 PDF 또는 PNG로 저장하는 것 외에도 다음을 추가합니다.

with open('some_file.pkl', "wb") as fp:
    pickle.dump(fig, fp, protocol=4)

이처럼 나중에 그림 개체를로드하고 내가 원하는대로 설정을 조작 할 수 있습니다.

스택의 각 함수 / 메소드에 대한 소스 코드와 locals() 사전을 사용하여 스택을 작성하므로 나중에 그 그림을 생성 한 내용을 정확히 알 수 있습니다.

주의 : 때로는이 방법이 거대한 파일을 생성하기 때문에 조심하십시오.




plot () 및 다른 함수를 사용하여 원하는 내용을 만든 후에 다음과 같은 절을 사용하여 화면에 표시하거나 파일을 선택하십시오.

import matplotlib.pyplot as plt

fig = plt.figure(figuresize=4, 5)
# use plot(), etc. to create your plot.

# Pick one of the following lines to uncomment
# save_file = None
# save_file = os.path.join(your_directory, your_file_name)  

if save_file:
    plt.savefig(save_file)
    plt.close(fig)
else:
    plt.show()



나처럼 Spyder IDE를 사용한다면 다음과 같이 대화 형 모드를 비활성화해야합니다.

plt.ioff()

(이 명령은 과학적 시작과 함께 자동 실행됩니다)

다시 사용하려면 다음을 사용하십시오.

plt.ion()




다음 중 하나를 수행 할 수 있습니다.

plt.show(hold=False)
plt.savefig('name.pdf')

GUI 플롯을 닫기 전에 savefig를 끝내는 것을 잊지 마십시오. 이렇게하면 미리 이미지를 볼 수 있습니다.

또는 plt.show() 볼 수도 있습니다. 그런 다음 GUI를 닫고 스크립트를 다시 실행하십시오. 이번에는 plt.savefig() plt.show() 를 대체하십시오.

또는 다음을 사용할 수 있습니다.

fig, ax = plt.figure(nrows=1, ncols=1)
plt.plot(...)
plt.show()
fig.savefig('out.pdf')


Related