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

Понимание matplotlib: plt, figure, ax (arr)?

Я не очень-то новичок в matplotlib, и мне очень стыдно признаться, что я всегда использовал его как инструмент для быстрого и легкого решения. Поэтому я знаю, как получить базовые сюжеты, подзаголовки и прочее и иметь довольно много кода, который время от времени используется повторно, но у меня нет "глубоких знаний" matplotlib.

Недавно я подумал, что должен изменить это и сам работать с некоторыми учебниками. Тем не менее, я все еще запутался в matplotlibs plt, fig(ure) и ax(arr). В чем разница?

В большинстве случаев для некоторых "quick'n'dirty" графиков я вижу людей, использующих только pyplot as plt, и напрямую рисую с помощью plt.plot. Поскольку у меня много раз приходится писать много, я часто использую f, axarr = plt.subplots()... но чаще всего вы видите только код, помещающий данные в axarr и игнорируя фигуру f.

Итак, мой вопрос: что такое чистый способ работы с matplotlib? Когда использовать только plt, для чего нужно использовать figure? Должны ли подсети просто содержать данные? Или это действительно и хорошая практика для всего, как стиль, очистка сюжета,... внутри подзаголовков?

Надеюсь, это далеко не так. В основном я прошу совета для истинных целей pltfigax(arr) (и когда/как правильно их использовать).

Учебники также приветствуются. Документация matplotlib довольно запутанна для меня. Когда вы ищете что-то действительно конкретное, например, перемасштабирование легенды, разные маркеры и цвета, и так далее, официальная документация действительно точна, но общая информация не так хороша, на мой взгляд. Слишком много разных примеров, никаких реальных объяснений целей... более или менее похоже на большой список всех возможных методов и аргументов API.

4b9b3361

Ответ 1

pyplot - это API уровня 'сценариев' в matplotlib (его API высшего уровня, который много делает с matplotlib). Это позволяет вам использовать matplotlib с использованием процедурного интерфейса аналогично тому, как вы можете сделать это с Matlab. pyplot имеет понятие "текущая фигура" и "текущие оси", которым делегируются все функции (@tacaswell dixit). Поэтому, когда вы используете функции, доступные в модуле pyplot, вы строите графики для "текущей фигуры" и "текущих осей".

Если вы хотите "детализировать" контроль над тем, где/что вы планируете, то вам следует использовать объектно-ориентированный API, используя экземпляры Figure и Axes.

Функции, доступные в pyplot, имеют эквивалентный метод в Axes.

Из репо анатомии matplotlib:

  • Figure является контейнером верхнего уровня в этой иерархии. Это общее окно/страница, на которой все нарисовано. Вы можете иметь несколько независимых фигур, а Figure может содержать несколько осей.

Но...

  • Большая часть черчения происходит на Axes. Оси, по сути, являются областью, на которой мы наносим данные, и любыми галочками/метками/и т.д., связанными с ними. Обычно мы устанавливаем Axes с вызовом на вспомогательный участок (который помещает Axes в регулярную сетку), поэтому в большинстве случаев Axes и Subplot являются синонимами.

  • Каждый Axes имеет XAxis и YAxis. Они содержат галочки, места для галочек, ярлыки и т.д.

Если вы хотите узнать анатомию сюжета, перейдите по этой ссылке.

Ответ 2

Я думаю, что этот учебник хорошо объясняет основные понятия иерархии объектов matplotlib, таких как Figure и Axes, а также понятие текущей фигуры и текущих осей.

Если вы хотите получить быстрый ответ: есть объект Figure, который является контейнером, который оборачивает несколько осей (который отличается от оси), который также содержит меньшие объекты, такие как легенды, линии, отметки... как показано на этом изображении из документация по matplotlib

enter image description here

Поэтому, когда мы делаем

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> type(fig)
<class 'matplotlib.figure.Figure'>
>>> type(ax)
<class 'matplotlib.axes._subplots.AxesSubplot'>

Мы создали объект Figure и объект Axes, которые содержатся на этом рисунке.

Ответ 3

  • pyplot - это matlab, как API для тех, кто знаком с Matlab и хочет делать быстрые и грязные графики.
  • figure - объектно-ориентированный API для тех, кто не заботится о построении стиля в стиле Matlab

Таким образом, вы можете использовать один, но, возможно, не оба вместе.