2011-12-27 16 views
3

イメージから選択ポイント(ポリゴンを取得する)を取得しようとしています。私は既にたくさんのコードにmatplotlib.figureを埋め込んでいますので、このスタイルをピラブの数字よりも使いたいと思っています。gplを使用しているときにmatplotlib.figureとpylabを使用しているエラー

import pylab 
from matplotlib.figure import Figure 

x1 = pylab.rand(103, 53) 
figure = Figure(figsize=(4, 4), dpi=100) 
axes = figure.add_subplot(111) 
axes.imshow(x1) 
x = figure.ginput(2) 

print(x) 

をしかし、私は次のエラーを取得する:私はフォローを行うにしようとしています、私は多かれ少なかれ、再生しようとしていることを作品

Traceback (most recent call last): 
    File "ginput_demo.py", line 17, in <module> 
    x = figure.ginput(2) 
    File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1177, in ginpu 
t 
    show_clicks=show_clicks) 
    File "C:\Python27\lib\site-packages\matplotlib\blocking_input.py", line 282, i 
n __call__ 
    BlockingInput.__call__(self,n=n,timeout=timeout) 
    File "C:\Python27\lib\site-packages\matplotlib\blocking_input.py", line 94, in 
__call__ 
    self.fig.show() 
AttributeError: 'Figure' object has no attribute 'show' 

元pylabコードがhereからです。

import pylab 

x1 = pylab.rand(103, 53) 
fig1 = pylab.figure(1) 
ax1 = fig1.add_subplot(111) 
ax1.imshow(x1) 
ax1.axis('image') 
ax1.axis('off') 
x = fig1.ginput(2) 

fig1.show() 

基本的に、pylab.ginputにmatplotlib.figureまたはmatplotlib.axesリファレンスを使用させる方法がありますか?

おかげで、

tylerthemiler

答えて

3

あなたはpylab.ginput代わりのmyfigure.ginputを使用する必要があります。 これを変更すると、axes.imshowがプロットしていないことがわかります。pylab.imshowを使用して修正できます。 最後に、クリックしてポジション番号を取得した後に数字が消えてしまうので、末尾にpylab.showを追加したいと思うでしょう。

これはコーディングMPLのお好みの方法でできるだけ近く従うことをしようと、作品:

from pylab import show, ginput, rand, imshow 
from matplotlib.figure import Figure 

x1 = rand(103, 53) 
figure = Figure(figsize=(4, 4), dpi=100) 
axes = figure.add_subplot(111) 

imshow(x1) 
x = ginput(2) 
print(x) 
show() 

は、私がここでの問題は、matplotlibの異なるモジュール(コーディングスタイル)を混合から来ていると思います。
myfigure.ginput()のメソッドを持たないFigureクラスについての苦情がありました。しかし、それは pylab.figure.ginput()で動作します。実際に
pylab.figure、それが実際pyplotモジュールで定義されたものである。

>>> import pylab 
>>> import matplotlib.pyplot as plt 
>>> pylab.figure is plt.figure 
True 

クラスmatplotlib.figure.Figureであることが

myfigure = matplotlib.figure.Figure() 

pyplot.figure図インスタンスと同じではないことカップルを実装追加メソッドのうちの1つ、show()

>>> from matplotlib import pyplot 
>>> from matplotlib.figure import Figure 
>>> pfig = set(dir(pyplot.figure())) 
>>> Ffig = set(dir(Figure())) 
>>> pfig.difference(Ffig) 
set(['number', 'show']) 

だからこそAttributeErrorFigureインスタンスになっています。

+0

感謝を使用して関連付けを保存することもできますので、 注意 - これはおそらく、上書きされます!これは私の基本的な問題を解決します。しかし、私は特定のケースでそれを実装する方法を知らない。上記の編集された質問。 – tylerthemiler

+0

これが基本的な問題を解決すれば、答えを選択する必要があります。そうでなければ、私はこの2番目の質問に答える時間を取れば、それを選択するのではなく無期限に延長するつもりはないと私は確信できますか? – joaquin

+0

完了、私の質問の第2部分で私を助ける時間があるかどうかを知っている。そうでなければ、私は別の質問で新しい助けを得るためにそれを掲示するでしょう:) – tylerthemiler

0

GUI(Pyqt4)で埋め込みプロットを使用しているときに、適切な解決策が得られませんでした.-私のクイック&は、Try/Catchをblocking_input.pyに入れていました。あなたはmatplotlibのを更新するときに一意の名前(複数可)

# TRY TO "Ensure that the figure is shown" in the standard way 
    try: 
     self.fig.show() 
    except AttributeError: 
     pass 
関連する問題