matplotlib Axes.plot() vs pyplot.plot()

В чем разница между Axes.plot() и pyplot.plot()? Используется ли в качестве подпрограммы другое?

Кажется, что мои варианты построения

line = plt.plot(data)

или же

ax = plt.axes()
line = ax.plot(data)

или даже

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
line = ax.plot(data)

Существуют ли ситуации, когда предпочтительнее использовать один над другим?

Ответ 1

Для рисования одного сюжета наилучшей практикой является, вероятно,

fig = plt.figure()
plt.plot(data)
fig.show()

Теперь давайте взглянем на 3 примера из квестона и объясним, что они делают.

  1. Принимает текущую цифру и оси (если она не существует, она создаст новую) и занесет в них.

    line = plt.plot(data)
    
  2. В вашем случае поведение такое же, как и раньше, с явным указанием осей для графика.

    ax = plt.axes()
    line = ax.plot(data)
    

    Этот подход использования ax.plot(...) является обязательным, если вы хотите нанести на несколько осей (возможно, на одном рисунке). Например, при использовании подзаголовков.

  3. Явно создает новую фигуру - вы ничего не добавите к предыдущей. Явно создает новые оси с заданной формой прямоугольника, а остальное - то же, что и с 2.

    fig = plt.figure()
    ax = fig.add_axes([0,0,1,1])
    line = ax.plot(data)
    

    возможная проблема с использованием figure.add_axes заключается в том, что он может добавить к фигуре новый объект осей, который накладывает первый (или другие). Это происходит, если запрашиваемый размер не соответствует существующим.

Ответ 2

По сути, нет никакой разницы. plt.plot в какой-то момент (после проверки наличия фигуры и осей, доступных для построения) вызовет функцию построения из этого экземпляра осей.

Таким образом, основное отличие заключается скорее в пользовательской части:

  • Вы хотите использовать подход конечного автомата, подобный Matlab, который может сохранить некоторые строки кода для простых задач построения графиков? Затем используйте pyplot.
  • Вы хотите иметь полный контроль над графиком, используя более питонический объектно-ориентированный подход? Тогда используйте объекты как оси явно.

Возможно, вы захотите прочитать руководство по использованию matplotlib usage guide.

Ответ 3

Методы построения Pyplot могут применяться либо к корню Pyplot (pyplot.plot()), либо к объекту axes (axes.plot()).

Вызов функции построения графиков непосредственно из библиотеки Pyplot (pyplot.plot()) создает субплот по умолчанию (рисунок и оси). Вызов его для объекта оси (axes.plot()) требует, чтобы вы уже создали свой собственный объект оси и поместили график в это настраиваемое пространство построения.

Хотя pyplot.plot() прост в использовании, вы можете лучше контролировать свое пространство (и лучше понимать взаимодействие с другими библиотеками), если создаете объект axes axes.plot().

Axes.plot() возвращает объект оси. Каждый объект оси имеет родительский объект фигуры. Объект оси содержит методы построения, а также большинство параметров настройки, в то время как объект рисунка хранит все атрибуты уровня рисунка и позволяет выводить график в виде изображения.

Если вы используете метод pyplot.plot() и хотите начать настройку осей, вы можете узнать имя созданного им объекта осей по умолчанию, вызвав pyplot.gca() для "получения текущих осей".

Ответ 4

python plt.plot(): он создаст много подзаговоров по умолчанию, сохранит много строк кода и прост для понимания

Axes.plot(): использование объекта axes даст вам больше возможностей для настройки пространства графика