2016-07-27 12 views
2

Ich möchte in der Lage sein, auf die zwei Schaltflächen zu klicken, die in der IPython-GUI generiert wurden, und dann insgesamt 6 Punkte in demselben Diagramm zu generieren. Wenn Sie jetzt jedoch auf die beiden Schaltflächen klicken, werden die 6 Punkte nicht erstellt und nur das Diagramm erstellt, das mit der ersten Schaltfläche erstellt wurde. Was mache ich falsch?Warum zeichnen diese Funktionen nicht zusammen auf demselben Graphen auf?

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
from ipywidgets.widgets import Button 
from IPython.display import display 

class Test(object): 
    def __init__(self): 
     self.figure = plt.figure() 
     self.ax = self.figure.gca() 
     self.button = Button(description = "Draw new points.") 
     display(self.button) 
     self.button.on_click(self.button_clicked) 
     self.button2 = Button(description = "Draw more points.") 
     display(self.button2) 
     self.button2.on_click(self.button_clicked2) 

    def button_clicked(self, event): 
     self.ax.scatter([1,2,8], [6,5,4]) 
     self.figure.canvas.draw() 
     plt.show() 

    def button_clicked2(self, event): 
     self.ax.scatter([1,0,5], [3,8,3]) 
     self.figure.canvas.draw() 
     plt.show() 

test = Test() 

Antwort

1

Ich spielte mit Ihrem Code und bekam es durch Hinzufügen% matplotlib Notebook und Entfernen Anrufe zu arbeiten(), um plt.show.

%matplotlib notebook 
import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
from ipywidgets.widgets import Button 
from IPython.display import display 

class Test(object): 
    def __init__(self): 
     plt.ion() 
     self.figure = plt.figure() 
     self.ax = self.figure.gca() 
     self.button = Button(description = "Draw new points.") 
     display(self.button) 
     self.button.on_click(self.button_clicked) 
     self.button2 = Button(description = "Draw more points.") 
     display(self.button2) 
     self.button2.on_click(self.button_clicked2) 

    def button_clicked(self, event): 
     self.ax.scatter([1,2,8], [6,5,4]) 
     self.figure.canvas.draw() 

    def button_clicked2(self, event): 
     self.ax.scatter([1,0,5], [3,8,3]) 
     self.figure.canvas.draw() 

test = Test() 

Stellen Sie sicher, dass Sie die neueste Version von matplotlib installiert haben. Diese Funktionalität hängt vom nbagg-Backend ab. Weitere Informationen finden Sie unter this question.