说我有以下简单函数可返回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)
但是,如果我不是简单函数而是递归函数,它还会绘制一个空白图形:
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)
那是为什么?以及如何预防呢?
答案 0 :(得分:0)
由于您已经修改了用于创建图形引用的库,因此请注意如何创建该引用,以免在您的图形中创建不必要的图形功能。我相信一个相当简单的更改是使用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