如何从matplotlib工具栏更新图例

时间:2014-10-28 15:35:37

标签: python-2.7 matplotlib legend

我正在为给定数据定义matplotlib图。一旦显示图表,我试图使用导航工具栏编辑选项更改一些线属性。

当我进行更改时,将示例实线表示为dashdotted,更新将反映在行上,但图例不会更新。

如何在单击“应用”按钮时捕获此事件,以便我可以使用此按钮刷新图例。目前我正在捕捉一个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

1 个答案:

答案 0 :(得分: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)