pyplot.gca () в невостребованной функции создает другой подплот - PullRequest
0 голосов
/ 24 октября 2018

В моем коде есть функция, которая использует экземпляр Axes для построения графика.Я хочу установить по умолчанию текущую ось.Это приводит к следующему коду:

from matplotlib import pyplot as plt

def plotfunc(ax=plt.gca()):
    # Here I would usually plot some functions on ax
    return True

plt.figure()
plt.show()

Что я мог бы ожидать от этого сценария, так это появление одной пустой фигуры.Но то, что я получаю, это одна фигура и другой пустой участок, хотя я даже не называю plotfunc.Дополнительный участок не появляется, когда я удаляю часть «= plt.cga ()» в коде.Есть ли способ установить pltgca () в качестве стандартной оси для plotfunc, не получая другой подплот?

Я использую python 3.6 под Ubuntu 18.04.1.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Обычный способ предоставления осей для функции и возврата к «текущим осям», если ни одна не указана, будет

def plotfunc(ax=None):
    ax = ax or plt.gca()
    # plot something to ax
    ax.plot(...)
0 голосов
/ 24 октября 2018

В Python аргументы ключевых слов по умолчанию для функции задаются во время определения функции (в отличие от call time).Итак, что происходит, когда вы запускаете этот скрипт:

  1. импорт выполняется
  2. plotfunc определен -> plt.gca() выполняется и возвращаемое значение привязывается к значению по умолчаниюзначение ax
  3. plt.figure() выполняется
  4. plt.show() выполняется

Даже если функция никогда не вызывается, задан аргумент ключевого слова по умолчаниюи соответствующий Axes (и рисунок) создан.Затем plt.figure() явно создает новую фигуру, вторую, которую вы видите.

Вам следует установить значение Sentinel на ax, как в ax=None, затем переопределить if ax is None: ax = plt.gca() внутри функции, которая происходит толькона вызов функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...