Шаблон для определения размера в байтах различных переменных

Если вы хотите сохранить фигуру после ее отображения, вам нужно удержать экземпляр фигуры. Причина, по которой plt.savefig не работает после вызова show, заключается в том, что текущий показатель был сброшен.

pyplot отслеживает, какие цифры, оси и т. Д. Являются «текущими» (т.е. имеют пока не отображается с show) за кадром. gcf и gca получают текущие экземпляры фигур и текущих осей соответственно. plt.savefig (и, по существу, любой другой метод pyplot) просто выполняет plt.gcf().savefig(...). Другими словами, получите текущий экземпляр фигуры и вызовите его метод savefig. Аналогично plt.plot в основном выполняет plt.gca().plot(...).

После вызова show список «текущих» фигур и осей пуст.

В общем, вы лучше прямое использование экземпляров фигур и осей для создания / сохранения / показа / etc, вместо использования plt.plot и т. д., чтобы неявно получить текущую цифру / оси и график на ней. Нет ничего плохого в использовании pyplot для всего (особенно в интерактивном режиме), но это облегчает стрельбу в ногу.

Используйте pyplot для plt.show() и для создания фигуры и объекта (ов) осей, но затем используйте методы с цифрами или осями напрямую. (например, ax.plot(x, y) вместо plt.plot(x, y) и т. д.) Основное преимущество этого заключается в том, что оно явное. Вы знаете, на каких объектах вы работаете, и не нужно рассуждать о том, что делает машина состояния pyplot (хотя и не так сложно понять интерфейс состояния и машины).

As пример «рекомендуемого» способа делать что-то вроде:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')

Если вы предпочитаете использовать интерфейс pyplot для всего, то просто возьмите экземпляр фигуры, прежде чем вы вызовете show. Например:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

plt.plot(x, y)
fig = plt.gcf()
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')
-11
задан areuz 26 August 2016 в 01:06
поделиться