[matplotlib] ipython에 표시하지 않고 pylab.savefig 호출
IPython 노트북에 표시하지 않고 파일에 그림을 만들어야합니다. 나는 이와 관련하여 IPython
와 사이의 상호 작용에 대해 명확하지 않습니다 matplotlib.pylab
. 그러나 pylab.savefig("test.png")
현재 그림을 호출 하면 test.png
. 대규모 플롯 파일 세트 생성을 자동화 할 때 이는 종종 바람직하지 않습니다. 또는 다른 앱에 의한 외부 처리를위한 중간 파일이 필요한 경우.
이것이 matplotlib
또는 IPython
노트북 질문 인지 확실하지 않습니다 .
답변
이것은 matplotlib 질문이며, 사용자에게 표시되지 않는 백엔드 (예 : ‘Agg’)를 사용하여이 문제를 해결할 수 있습니다.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('/tmp/test.png')
편집 : 플롯을 표시하는 기능을 잃지 않으려면 대화 형 모드 를 끄고 플롯을 표시 plt.show()
할 준비가되었을 때만 호출 하십시오.
import matplotlib.pyplot as plt
# Turn interactive plotting off
plt.ioff()
# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('/tmp/test0.png')
plt.close(fig)
# Create a new figure, plot into it, then don't close it so it does get displayed
plt.figure()
plt.plot([1,3,2])
plt.savefig('/tmp/test1.png')
# Display all "open" (non-closed) figures
plt.show()
답변
plt.ioff()
또는 plt.show()
(사용하는 경우) 필요하지 않습니다 %matplotlib inline
. 위의 코드는 plt.ioff()
. plt.close()
필수적인 역할을합니다. 이거 한번 해봐:
%matplotlib inline
import pylab as plt
# It doesn't matter you add line below. You can even replace it by 'plt.ion()', but you will see no changes.
## plt.ioff()
# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('test0.png')
plt.close(fig)
# Create a new figure, plot into it, then don't close it so it does get displayed
fig2 = plt.figure()
plt.plot([1,3,2])
plt.savefig('test1.png')
iPython에서이 코드를 실행하면 두 번째 플롯이 표시 plt.close(fig2)
되고 끝에 추가 하면 아무것도 표시되지 않습니다.
결론적으로 그림을로 닫으면 plt.close(fig)
표시되지 않습니다.