安德鲁';s曲线:调用Python对象时超出了最大递归深度

安德鲁';s曲线:调用Python对象时超出了最大递归深度,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我试图让Andrew的曲线使用以下代码: import pandas as pd from pandas.plotting import andrews_curves def andrews_curves(df, class_column, normalize = False): plt.style.use("ggplot") plt.figure() andrews_curves(df, class_column) plt.draw() andrews_

我试图让Andrew的曲线使用以下代码:

import pandas as pd
from pandas.plotting import andrews_curves

def andrews_curves(df, class_column, normalize = False):
    plt.style.use("ggplot")  
    plt.figure()
    andrews_curves(df, class_column)
    plt.draw()

andrews_curves(players, "RANK")

plt.show()
其中
players
是我的数据帧。它放弃了警告:

More than 20 figures have been opened
然后:

RecursionError: maximum recursion depth exceeded while calling a Python object
这只发生在Andrew的曲线上,因为平行坐标在几乎相同的代码下工作良好:

def parallel_coords(df, class_column):
    plt.style.use("ggplot")
    plt.figure()
    parallel_coordinates(df, class_column = class_column, cols = list(df), alpha = 0.4)
    plt.draw()

parallel_coords(players, "RANK")
plt.show()

我曾尝试使用
clear('all')
clf()
cla()
方法,但它们都没有效果。

您需要在代码中重命名函数
andrews\u curves

似乎您要做的是在自己的
andrews\u curves
函数中调用
pandas.plotting.andrews\u curves

问题是,一旦定义andrews_曲线,它就会替换同名的另一个对象,因此调用函数的效果是它递归地调用自己,直到达到pythons递归极限:

这不会影响并行协调,因为您在其中调用的函数具有不同的名称

简而言之,将andrews_曲线函数重命名为其他函数:

def plot_andrews_curves(df, class_column, normalize = False):
    plt.style.use("ggplot")  
    plt.figure()
    andrews_curves(df, class_column)
    plt.draw()
你就不会有这个问题了