2017-08-15 3 views
0

Dies ist nur ein kleines Problem, das mich seit einer Weile nervt.Entfernen Sie Matplotlib-Plots in der gleichen Zelle in Jupyter Notebook mit interaktiven Widgets

Ich habe einen Pandas-Datenrahmen, bestehend aus allen kontinuierlichen Variablen. Ich möchte ein Streudiagramm (unter Verwendung von Matplotlib) für jedes ausgewählte Paar von Variablen zeichnen und dabei auch die interaktiven Widgets in Jupyter verwenden.

Nehmen wir an, die Daten haben 3 numerische Spalten: 'a', 'b' und 'c'.

Bisher habe ich diese Zeilen von Codes:

def g(x,y): 
    plt.scatter(x, y) 
interactive_plot = interactive(g, x=['a','b','c'], y=['a','b','c']) 
interactive_plot 

Und sie funktionieren, wie in sie ein Streudiagramm Churn, wenn ich mit den Drop-Down-Boxen für x und y, und wählen Sie eine umschaltbare Variablenpaar aus den 3 verfügbaren Variablen. Das Problem hierbei ist jedoch, dass vorherige ausgegebene Plots nicht gelöscht werden, bevor ein neues Plot angezeigt wird. Mit anderen Worten aktualisiert matplotlib den Plot in der vorhandenen Figur nicht, sondern stapelt Plots/Figuren einfach übereinander. Wenn ich also die Auswahl der Variablenpaare 10 Mal ändere, erhalte ich 10 Streudiagramme, was ich nicht möchte.

Könnte mir jemand dabei helfen?

Vielen Dank im Voraus.

+0

Der Code, den Sie wie 'Valueerror in etwas würde zeigen: string nicht konvertieren konnte zu schweben: a'. Aus der Antwort unten sehen Sie, wie ein [mcve] aussehen könnte. Bitte verwenden Sie solche [mcve] s immer, wenn Sie Fragen stellen. – ImportanceOfBeingErnest

Antwort

0

Sie können plt.show() am Ende Ihrer Funktion hinzufügen. Dadurch wird das Diagramm in derselben Zelle neu erstellt, anstatt ein neues hinzuzufügen.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from ipywidgets import interactive 
%matplotlib inline 

columns=['a','b','c'] 
data = np.cumsum(np.random.rand(10,3),axis=1) 
df = pd.DataFrame(data,columns=columns) 

def g(x,y): 
    plt.scatter(df[x], df[y]) 
    plt.show() 

interactive_plot = interactive(g, x=columns, y=columns) 
interactive_plot 

enter image description here

+0

Vielen Dank. Das hat mein Problem gelöst. Ich dachte immer, dass plt.show() nur zum Anzeigen von Plots im Notebook (entspricht mit% matplotlib inline) und nichts mehr. –

Verwandte Themen