Звоню в пилаб.savefig без отображения в ipython
мне нужно создать фигуру в файле без отображения его в IPython notebook. Я не совсем понимаю, о взаимодействии между IPython
и matplotlib.pylab
в этой связи. Но, когда я звоню pylab.savefig("test.png")
текущая цифра get отображается в дополнение к сохранению в test.png
. При автоматизации создания большого набора файлов участков это часто нежелательно. Или в ситуации, когда требуется промежуточный файл для внешней обработки другим приложением.
не уверен, что это matplotlib
или IPython
вопрос ноутбука.
2 ответа:
Это вопрос matplotlib, и вы можете обойти это, используя бэкэнд, который не отображается пользователю, например "Agg":
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.savefig('/tmp/test.png')
EDIT: если вы не хотите потерять возможность отображения участков, выключить Интерактивный Режим, и только вызов
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)
, оно не будет отображаться.