2016-08-05 25 views
1

有什麼辦法可以在用戶放大後更新Matplotlib圖形的標題??例如,我想標題,以顯示確切的延伸x軸的,Matplotlib:如何在用戶放大後更新圖形標題?

import pylab as pl 
import numpy as np 

x = np.arange(10,step=0.1) 
y = np.sin(x) 

f = pl.figure() 
pl.plot(x,y) 

def my_ondraw(ev): 
    x1,x2 = f.gca().get_xlim() # FIXME value hasn't been updated yet 
    pl.title("x = [%f, %f]" % (x1,x2)) 

f.canvas.mpl_connect('draw_event', my_ondraw) 

pl.show() 

如前所述,我的代碼不會從get_xlim(),因爲再拉不是招」得到正確的值回當時my_ondraw被稱爲...

有什麼建議嗎?


修改代碼,基於以下伊利亞的建議工作

import pylab as pl 
import numpy as np 

x = np.arange(10,step=0.1) 
y = np.sin(x) 

f = pl.figure() 
ax = f.gca() 
pl.plot(x,y) 

def my_ondraw(ev): 
    print "my_ondraw: %s" % ev.name 
    x1,x2 = f.gca().get_xlim() # FIXME value hasn't been updated yet 
    pl.title("x = [%f, %f]" % (x1,x2)) 

ax.callbacks.connect('xlim_changed', my_ondraw) 

pl.show() 

回答

1

您可以在xlim_changedylim_changed事件註冊回調函數。試試這樣的:

def on_xylims_change(axes): 
    x1,x2 = f.gca().get_xlim() # FIXME value hasn't been updated yet 
    pl.title("x = [%f, %f]" % (x1,x2)) 

fig, ax = pl.subplots(1, 1) 
ax.callbacks.connect('xlim_changed', on_xylims_change) 
ax.callbacks.connect('ylim_changed', on_xylims_change) 

你可以在這裏閱讀更多關於它:Event handling and picking in Matplotlib

+0

是的,它的工作原理。然而,這個文檔在這個特殊點上非常糟糕,因爲它不能清楚地表明'xlim_changed'存在,以及如何將事件連接到它。但是你的榜樣讓我直觀。謝謝! – jdpipe

+0

@jdpipe不客氣! – Ilya

相關問題