Подтвердить что ты не робот

Вызов pylab.savefig без отображения в ipython

Мне нужно создать фигуру в файле, не отображая ее в ноутбуке IPython. В этом отношении я не понимаю взаимодействия между IPython и matplotlib.pylab. Но, когда я вызываю pylab.savefig("test.png"), текущий показатель отображается в дополнение к сохранению в test.png. При автоматизации создания большого набора файлов сюжетов это часто нежелательно. Или в ситуации, когда требуется промежуточный файл для внешней обработки другим приложением.

Не уверен, что это вопрос с записью matplotlib или IPython.

4b9b3361

Ответ 1

Это вопрос 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()

Ответ 2

Нам не нужно 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), она не будет отображаться.