2016-07-10 12 views
1

Ich benutze ipython notebook und versuche die folgende funktion zu verwenden, um seaborn distplots zu exportieren. Es funktioniert gut, wenn ich die Funktion aufrufen und mit jeweils nur einer Variablen ausführen. Wenn ich die Funktion in einer Schleife aufruft, baut sie weiterhin auf dem Distplot des vorherigen Funktionsaufrufs auf.seaborn distplot loop faule auswertung

Meine gewünschte Ausgabe wäre, dass die Funktion jedes Mal, wenn sie in einer Schleife aufgerufen wird, eine neue Ausgabe ausgibt. Gibt es eine Möglichkeit, eine Evaluierung oder einen neuen Distrot zu erzwingen? Diese

def graph_extraversion (x): 


    file_name = "extraversion_" + str(x) + ".png" 
    sns_plot = sns.distplot(Personalities[Personalities.labels1 ==x].extraversion) 
    sns_plot = sns.distplot(df.extraversion) 
    fig = sns_plot.get_figure() 
    fig.savefig(file_name) 
    new_stat = Personalities[Personalities.labels1 ==x].extraversion.describe() 
    extraversion_drift = extraversion_median - new_stat[1] 
    drift = extraversion_drift/extraversion_std 
    if (drift >= 1) | (drift <= -1): 
     return "1 std deviation or more" 
    else: 
     return "Less than one std deviation" 

was ist das, was die distplot sieht aus wie nach einem Aufruf

enter image description here

Dies ist zwei Anrufe später in einer Schleife.

enter image description here

Wieder funktioniert dies ganz gut mit einem einzigen Aufruf und Ausführung, aber wenn geschlungen es immer wieder zu bauen.

+0

Sie mögen http://stackoverflow.com/questions/23969619/plotting-with-seaborn-using-the-matplotlib-object-oriented-interface. – mwaskom

+0

Ich schaute auf die Buchung, aber gibt es eine Möglichkeit, die Funktion an den Anrufer zurückzugeben und eine neue Figur in einer Schleife zu instanziieren. –

Antwort

1

Das hat also mit Matplotlib und Schlusszahlen zu tun.

zusätzlicher Code erforderlich ist ein Import:

import matplotlib.pyplot as plt 

Dann am Ende der func:

plt.close(fig) 

Diese mit jeder Schleife mit beiden Seaborn helfen sollen und matplotlib

+1

Kein zusätzlicher Import erforderlich, nur 'fig.close()'. Die Verwendung des Figurenobjekts scheint der akzeptablere Weg zu sein, dies zu tun. – pbreach