2014-10-28 104 views
2

我正在爲給定數據定義matplotlib圖。一旦圖表顯示,我正在嘗試使用導航工具欄編輯選項更改某些行屬性。如何從matplotlib工具欄更新圖例

當我做出改變時,例如用實線表示線條,更新會反映在線條上,但傳說不會更新。

如何在點擊應用按鈕時捕獲此事件,以便我可以使用它刷新圖例。此刻,我正在捕捉pick_event作爲刷新傳奇的信號。

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib 
matplotlib.use('Qt4Agg') 


x=np.linspace(0,100,100) 
y=np.linspace(100,200,100) 
plt.plot(x,y,label='test') 
plt.legend() 
ax.legend() 
plt.show() 
#optional code 
def on_press(event): 
    lines, labels = ax.get_legend_handles_labels() 
    ax.legend(lines, labels, loc=0) 
    fig.canvas.draw() 

cid = fig.canvas.mpl_connect('pick_event', on_press) 

Plot image from the above code Plot Image showing modifying line type Plot Image showing the legend is not modified

+0

你的問題很混亂......你的例子並沒有真正的幫助(它什麼都不做)。你可能打算把'fig.canvas.draw()'放在你的事件中。但主要是,你究竟想要這個例子做什麼? – Ajean 2014-10-29 15:55:26

+0

我編輯了我的示例。我想要做的就是更新圖例,當繪圖標記類型或線條類型使用圖形編輯選項 – Sri 2014-10-29 16:03:42

+0

被修改時,我看到了 - 示例做了你想要的,但你想要一個更聰明的方法,是嗎?我知道去年傳奇故事的問題出現了,但是如果/如何追求它,我不知道。我不太瞭解NavigationToolbar內部尋找事件處理的方法,所以我會把它留給那些做的事情。 – Ajean 2014-10-29 16:17:40

回答

1

有點掙扎後,只有簡單的方法來解決這個解決方案是增加傳說刷新作爲導航工具欄的部分回撥功能

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib 

def home_callback(): 
    print "home called" 
    ax.legend() 

x=np.linspace(0,100,100) 
y=np.linspace(100,200,100) 
fig=plt.figure() 
ax=fig.add_subplot(111) 
ax.plot(x,y,label='test') 
ax.legend() 
plt.show() 

fm = plt.get_current_fig_manager() 

fm.toolbar.actions()[0].triggered.connect(home_callback) 
相關問題