Имена предметов
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 в пользовательский интерфейс программы, которую вы пишете.
Между этими крайностями есть большая серая зона, и если вы спросите меня, что делать, я просто скажу: «Это зависит от обстоятельств» ...