Имена предметов
Matplotlib строго объектно-ориентирован, и его основными объектами являются фигура и оси (я считаю, что название axesнемного вводит в заблуждение, но, вероятно, это только я).
Вы можете думать о фигуре как о холсте , для которого вы обычно указываете размеры и, возможно, цвет фона и т.д. и т. Д. Вы используете холст, фигуру , по существу, двумя способами, размещая на ней другие объекты (в основном оси , но также текстовые метки и т. д.) и сохраняя его содержимое с помощью savefig.
Вы можете думать о топоре как о швейцарском армейском ноже, удобном предмете, который предлагает инструмент (например .plot, .scatterи .histт. Д.) Для всего, в основном. Вы можете разместить одну, две, ... много осей внутри фигуры, используя один из множества различных методов.
pltинтерфейс
Рх процедурный интерфейс был первоначально разработан , чтобы имитировать интерфейс MATLAB ™ , но на самом деле не отличается от интерфейса объектно - ориентированным, даже если вы не сделаете прямую ссылку на основные объекты (то есть, фигура и Ан оси ) эти объекты создается автоматически, и каждый метод plt , по сути, транслируется в вызов одного из методов базовых фундаментальных объектов: например, a plt.plot()- это, hidden_axes.plotа a plt.savefig- это hidden_figure.savefig.
В любой момент вы можете управлять этими скрытыми объектами с помощью plt.gcfи plt.gca, и это иногда необходимо, когда один из методов объекта не был перенесен в метод в пространстве имен plt .
Я хотел бы добавить, что пространство имен plt также содержит ряд удобных методов для создания экземпляров фигур и осей разными способами .
Ваши примеры
1-й способ
plt.plot(x, y)
Здесь вы используете только интерфейс plt , вы можете использовать только одну ось на каждом рисунке , но это то, что вам нужно, когда вы проводите исследование своих данных, быстрый рецепт, который выполняет работу ...
2-й способ
ax = plt.subplot()
ax.plot(x, y)
Здесь вы используете удобный метод в пространстве имен plt, чтобы дать имя (и дескриптор) вашему объекту осей , но, кстати, есть также скрытая фигура . Позже вы можете использовать объект оси для построения графика, построения гистограммы и т.д., всего, что вы можете делать с интерфейсом plt , но вы также можете получить доступ ко всем его атрибутам и изменить их с большей свободой.
3-й способ
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)
Здесь вы начинаете создавать экземпляр фигуры, используя удобный метод в пространстве имен plt, а позже вы используете только объектно-ориентированный интерфейс.
Можно обойти удобный метод plt ( matplotlib.figure.Figure), но затем вам придется настроить фигуру для лучшего интерактивного взаимодействия (в конце концов, это удобный метод).
Персональные рекомендации
Я предлагаю голый plt.plot, plt.scatterв контексте интерактивного сеанса, возможно, использовать IPython с его %matplotlibволшебной командой, а также в контексте исследовательской записной книжки Jupyter.
С другой стороны, объектно-ориентированный подход плюс несколько plt
удобных методов - это лучший вариант.
- если у вас есть постоянная проблема, которую нужно решить раз и навсегда с помощью индивидуализированного набора точно настроенных подзаголовков,
- если вы хотите встроить Matplotlib в пользовательский интерфейс программы, которую вы пишете.
Между этими крайностями есть большая серая зона, и если вы спросите меня, что делать, я просто скажу: «Это зависит от обстоятельств» ...