Почему при возврате объекта рисунка matplotlib в рекурсивную функцию выводится дополнительная пустая фигура? - PullRequest
0 голосов
/ 06 ноября 2018

Скажем, у меня есть следующая простая функция для возврата объекта фигуры matplotlib:

import matplotlib.pyplot as plt
def return_mpl_fig(x,y):
    mpl_fig = plt.figure()
    ax = mpl_fig.add_subplot(111)
    ax.plot(x,y)
    return mpl_fig

Я могу преобразовать объект фигуры matplotlib в объект графической фигуры и построить его:

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.tools as tls

x=[i for i in range(1,11)]
y=[i for i in range(1,11)]

mpl_fig = return_mpl_fig(x,y)
plotly_fig = tls.mpl_to_plotly(mpl_fig)

init_notebook_mode(connected=True)
iplot(plotly_fig)

enter image description here

Но если вместо простой функции я сделаю ее рекурсивной функцией, она дополнительно отобразит пустую фигуру:

import matplotlib.pyplot as plt
def return_mpl_fig(x,y):
    mpl_fig = plt.figure()
    ax = mpl_fig.add_subplot(111)
    if len(x)>5:
        return return_mpl_fig(x[:5],y[:5])
    ax.plot(x,y)
    return mpl_fig

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.tools as tls

x=[i for i in range(1,11)]
y=[i for i in range(1,11)]

mpl_fig = return_mpl_fig(x,y)
plotly_fig = tls.mpl_to_plotly(mpl_fig)

init_notebook_mode(connected=True)
iplot(plotly_fig)

enter image description here

Почему это? И как мне это предотвратить?

1 Ответ

0 голосов
/ 06 ноября 2018

Поскольку вы изменили библиотеку, которую используете для создания ссылки на свою фигуру, вам нужно помнить как вы создаете эту ссылку, чтобы не создавать ненужных фигур в своей функции , Я полагаю, что довольно простым изменением было бы написать вашу функцию, используя gcf() и gca(), которые возвращают экземпляры текущей фигуры или осей, если они существуют, в противном случае создайте новые:

def return_mpl_fig(x,y):
    mpl_fig = plt.gcf()
    ax = mpl_fig.gca()
    if len(x)>5:
        return return_mpl_fig(x[:5],y[:5])
    ax.plot(x,y)
    return mpl_fig
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...