2014-03-06 99 views
0

這裏編程noob。我試圖在PyQt4 GUI中使用matplotlib小部件。該部件與matplotlib的example for qt類似。使用matplotlib中的PyQt

在某些時候,用戶需要點擊劇情,我認爲像ginput()會處理的情節。但是,這不起作用,因爲該數字沒有經理(見下文)。請注意,這與another question非常相似,但它從來沒有得到答案。

AttributeError: 'NoneType' object has no attribute 'manager' 
Figure.show works only for figures managed by pyplot, normally created by pyplot.figure(). 

我假設「通常」有一種解決方法。

另一種簡單的腳本來演示:

from __future__ import print_function 

from matplotlib.figure import Figure 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0, 5, 0.1) 
y = np.sin(x) 
# figure creation by plt (also given a manager, although not explicitly) 
plt.figure() 
plt.plot(x,y) 
coords = plt.ginput() # click on the axes somewhere; this works 
print(coords) 

# figure creation w/o plt 
manualfig = Figure() 
manualaxes = manualfig.add_subplot(111) 
manualaxes.plot(x,y) 
manualfig.show() # will fail because of no manager, yet shown as a method 
manualcoords = manualfig.ginput() # comment out above and this fails too 
print(manualcoords) 

一樣受歡迎pyplot是(我不能很難找到沒有它的答案),它似乎並不具有GUI工作時發揮好。我認爲pyplot只是OO框架的一個包裝,但我想我只是一個noob。

我的問題是這樣的: 有沒有辦法將pyplot附加到matplotlib.figure.Figure的實例? 有沒有簡單的方法將管理人員附加到圖上?我在matplotlib.backends.backend_qt4agg中發現了new_figure_manager(),但無法使其正常工作,即使它是正確的解決方案。

非常感謝,

詹姆斯

+0

你想處理按鈕單擊事件? – zhangxaochen

+0

具體而言,是的;我用canvas.connect()函數解決了這個問題,儘管它沒有幫助我理解。通常,我希望我的嵌入式matplotlib小部件具有pyplot的方法(gingput等)。 – James

回答

2

pyplot只是一種OO接口的包裝,但你讀的例子也做了很多工作,你鏈接到再仔細的

FigureCanvas.__init__(self, fig) 

線是非常重要的,因爲這是告訴圖什麼帆布使用。 Figure對象只是Axes對象的集合(和幾個Text對象),canvas對象是知道如何將Artist對象(即matplotlib內部表示線條,文本,點等)的對象轉換爲漂亮的顏色。另請參閱something I wrote瞭解另一個嵌入示例,該示例不包含子類FigureCanvas

有一個PR使這個過程變得更容易,但是當我們得到1.4門時,它會停滯。

還看到:Which is the recommended way to plot: matplotlib or pylab?How can I attach a pyplot function to a figure instance?

+0

我對圖形的瞭解;這就說得通了。我想我正在盤旋解決方案,我只是沒有在那裏=)我會看看你的工作,謝謝! – James