2009-08-02 6 views
9

奇妙な行動を尋ねられたとき、私はそれは私が台無しだと確信していますが、私は何が起こっているかの底に取得したいのですがハング:Pythonのmatplotlibのは、(最初​​のグラフウィンドウを閉じた後)2つ目のグラフをプロットするために

私はmatplotlibのを使用して、非常に単純なグラフウィンドウを作成するには、次のコードを実行しています:

>>> import matplotlib.pyplot as plt 
>>> fig = plt.figure() 
>>> ax = fig.add_subplot(111) 
>>> ax.plot((1, 3, 1)) 
[<matplotlib.lines.Line2D object at 0x0290B750>] 
>>> plt.show() 

私が行くのは非常にシンプルな青色の線を含む、ポップアップした新しいウィンドウで、1が期待するチャートを取得し、予想通り1から3までをy軸上で1に戻し、0,1,2をx軸の点(例として)として返します。今度は、グラフウィンドウを閉じます(ウィンドウの右下にある十字ボタンを使用)。これは私にインタプリタに制御を与え、私は再び起動し、新しいオブジェクトを作成:

>>> 
>>> fig1 = plt.figure() 
>>> bx = fig1.add_subplot(111) 
>>> bx.plot((1, 3, 1)) 
[<matplotlib.lines.Line2D object at 0x029E8210>] 
>>> plt.show() 

この時間は、しかし、私はそれで何も(ちょうどフレーム、無白地何も)で、窓枠を取得し、バン・シュート全体がハングアップする。私は "タスクを終了"する必要があり、Pythonインタプリタはシステムによって終了し、私はコマンドプロンプトを返します。 Macでの同様の動作(実際にグラフを最初にプロットしてからハングする前を除く)。

だから、どういうわけか、Pythonやmatplotlibは私が手動でウィンドウを閉じるのを望んでいません。誰が何が起こっているのか、私は何をすべきか知っていますか?私がしたいのは、インタプリタの中から別のプロットを使って遊んでいることです。明らかにこの動作は役に立ちません。私は "Ipython -pylab"を使うことができますが、学習のために上記のエラーを理解したいと思います。

ありがとうございました。

答えて

2

明らかに、これはtkinterバックエンドのバグが原因です。たとえば、https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834を参照してください。それは上で働いている... 少し古いtkinterライブラリに回帰することができるなら、それは時間の回避策でなければなりません(私はこの2週間前に同じことに遭遇しました、そして、それは私の唯一の希望でした)。

0

あなたは試すんでした:

plt.close() 

を使用すると、プロットオブジェクトを閉じたことを確認しますか?

+0

をプロットする前に

plt.switch_backend('Qt4Agg') 

を。 私がplt.show()を呼び出すと、Pythonインタプリタがグラフウィンドウを表示します。つまり、私はプロンプトが表示されません。私が窓を閉じるときだけ、私はプロンプトを返す。私がplt.close()を呼び出してそれを実行すると、まったく同じように動作します。つまり、ハングします。 Matplotlibのウェブサイトを掘り下げて感じると、基本的にiPythonを-pylabモードで使いたいと思っています。 –

+0

scipyをダウンロードしてください。まだダウンロードしていない場合は、pylabをインポートしてください。 matplotlibのように動作します。 – Nope

+0

いいえ - どちらもありません。 pylabをインポートして上記をすべて行う場合、まったく同じように動作します。 –

2

標準のPythonインタプリタの代わりにipythonを使用しようとしましたか?

easy_install ipython 

をし、その後、ipythonはpylabで走ったことにする特定のモードと呼ばれる-pylabています:

次のコマンドを使用して、ipythonインストールすることができ

ipython -pylab 

In[1]: ... 

私はほとんどのことを考えると人々はこのソリューションを使ってPythonでグラフをプロットしますが、これはR/Matlab、Compleitionなどのコマンドラインに似ています。そして、それはあなたが持っている問題を持たないように、記載されている。

+0

ありがとう - はい私はIpythonのルートを知っています(上記のコメントを参照)。確かに、たとえそれが少し予測できないとしても、これが行く方法であるように見えます。私はあなたが正しいと思う。 Basicall Ipythonは今後の道です。 –

8

パーティーに3ヶ月遅れましたが、私はshow()ではなくdraw()を使用するようにmatlibplotのドキュメントで提案を見つけました。前者は明らかに現在のプロットのレンダリングを行い、後者は問題が始まるような対話型ツールをすべて起動します。

それはひどく目立つドキュメントに配置されていないのですが、ここではリンクがあります: http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show

何が価値があるために、私は(pylab.showを試してみた)とpylabながら、あなたがやったとまったく同じ問題がありました。私が出力を見たいだけならdraw()はうまくいくようです。

+0

ありがとうリッチ - 便利です。実際にはちょっと後にmatplotlibに戻ってしまったので、3ヶ月は遅すぎることはありません。 –

+0

リンクありがとうございます。私はいつもshow()とdraw()について混乱していましたが、ついにそれについての良い情報が見つかりました。 – Viktiglemma

+0

Matplotlib 1.4がリリースされて2014年ですが、この回答はまだまだ関連しています。 – SkyNT

0

どこかに上記の投稿のよう:最後の1以外のすべてのあなたのプロットに対して

使用plt.draw()。あなたの最後のプロットの

は、plt.show()

を使用するそれは奇妙だが、最後の1でplt.show()を使用し、代わりにplt.draw()をしようとしていない場合、あなたはどのプロットが表示されません。

これで幸運を祈る!

0

TkAggをバックエンドとして使用すると、この問題が発生しました。 plt.close('all')を使用した後、私のコンピュータは凍りました。

解決策は、別のバックエンドに切り替えることでした。私は今代わりにQt4Aggを使用します。

あなたはQt4Agg installedを持っている場合、次のように入力してバックエンドを切り替えることが可能である:私は今、ケーシーを持っていませんが、何の変化データ

関連する問題