2016-07-27 72 views
2

我希望能夠點擊IPython GUI中生成的兩個按鈕,然後在同一個圖上生成總共6個點。但是,現在單擊這兩個按鈕不會創建6個點,而只會創建由第一個按鈕進行點擊的圖形。我究竟做錯了什麼?爲什麼這些函數不能一起繪製同一個圖形?

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() 

回答

1

我與您的代碼發揮各地,並得到它通過添加%matplotlib筆記本電腦和刪除通話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() 

確保您安裝了最新版本的matplotlib。這個功能取決於nbagg後端。有關更多信息,請參閱this question

相關問題