[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)표시되지 않습니다.


답변