2015-07-04 106 views
1

我知道關於更新while循環中的圖的幾個相關問題,但他們沒有完全解決我的問題。爲matplotlib直方圖公開更新方法的簡單方法

我想公開 - 儘可能簡單 - 我可以調用一個方法來在新數據可用時更新繪圖。具體的上下文是,我希望參數的直方圖在模型的訓練循環內進行一定次數的迭代後更新。

當我說盡可能簡單 - 我很少偶爾更新情節,我完全可以簡單地關閉並重新繪製一個新的情節。不幸的是我無法做到這一點 - 因爲訓練循環運行了許多獨立的數字窗口,直到循環終止時才顯示任何東西。

我想的第一件事是創建一個類的情節是這樣的更新方法:

class ParamPlot(object): 

def __init__(self, model): 
    self.model = model 
    # model.param_classes is a list different sets of parameters 
    n_param_classes = len(model.param_classes) 
    self.fig, self.ax_arr = plt.subplots(nrows=n_param_classes) 


def update(self): 
    plt.clf() 
    for params, axis in zip(model.param_classes, self.ax_arr): 
     # assume that params is an array 
     axis.hist(params, bins=250, normed=True) 
    self.fig.canvas.draw() 

,但是這導致了大量的圖形窗口被催生,其中沒有顯示任何東西,直到循環終止。

我該如何做到這一點?

+0

你有沒有看在這個問題[如何更新情節圖?](http://stackoverflow.com/questions/4098131/how-to-update-a-plot-in-matplotlib) –

+0

謝謝你做的伎倆! – rueberger

回答

0

這裏就是我得到了它的工作(以下how to update a plot figure?

class ParamPlot(object): 

def __init__(self, model): 
    self.model = model 
    # model.param_classes is a list different sets of parameters 
    n_param_classes = len(model.param_classes) 
    self.fig, self.ax_arr = plt.subplots(nrows=n_param_classes) 


def update(self): 
    for axis in np.ravel(self.ax_arr): 
     axis.clear() 
    for params, axis in zip(model.param_classes, self.ax_arr): 
     # assume that params is an array 
     axis.hist(params, bins=250, normed=True) 
    plt.draw() 

注意clear被稱爲在每個軸上。

這還不算快,但它的簡單和它的作品。