9

奇妙な振る舞いです。間違いなく私が失敗していると思いますが、何が起こっているのかを突き止めたいと思います。

次のコードを実行して、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()

そして予想通り、ポップアップした新しいウィンドウで、y軸上で1から3から1に戻る非常に単純な青い線を含み、x軸のポイントとして0、1、2を持つ、予想通りのチャートを取得します(例として)。次に、グラフ ウィンドウを閉じます (ウィンドウの右上にある十字ボタンを使用します)。これにより、インタープリターを制御できるようになり、新しいオブジェクトの作成を再開します。

>>>
>>> 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」を使用できることはわかっていますが、学習のために、上記のエラーを理解したいと思います。

ありがとう。

4

6 に答える 6

8

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

ドキュメントではそれほど目立つように配置されていませんが、リンクは次のとおりです:http: //matplotlib.sourceforge.net/faq/howto_faq.html#use-show

価値のあることとして、私はpylab.show()を試しましたが、まったく同じ問題が発生しましたが、出力を見たいだけの場合はpylab.draw()が正常に機能しているようです。

于 2009-11-24T04:25:16.347 に答える
2

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

次のコマンドでipythonをインストールできます。

easy_install ipython

次に、ipythonには、-pylabと呼ばれるpylabで実行される特定のモードがあります。

ipython -pylab

In[1]: ...

ほとんどの人がこのソリューションを使用してPythonでグラフをプロットしていると思います。これは、R / Matlab、完了などのコマンドラインに似ています。プロットごとに個別のスレッドを実行するため、実行しないでください。あなたが説明した問題があります。

于 2009-08-02T22:29:21.330 に答える
2

どうやら、これはtkinterバックエンドのバグが原因です。たとえば、https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834を参照してください。作業中です...少し古いtkinterライブラリに戻ることができれば、それは当面の回避策になるはずです(数週間前に同じことを経験しましたが、それが私の唯一の希望でした)。

于 2009-08-08T21:23:59.767 に答える
0

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

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

Qt4Agg がインストールされている場合は、次のように入力してバックエンドを切り替えることができます。

plt.switch_backend('Qt4Agg')

データをプロットする前に

于 2016-09-05T08:50:44.787 に答える
0

試しましたか:

plt.close()

プロットオブジェクトを閉じたことを確認するには?

于 2009-08-02T18:22:44.623 に答える
0

上記のどこかに投稿されたように:

plt.draw()最後のプロットを除くすべてのプロットに使用します。

最後のプロットでは、使用しますplt.show()

奇妙ですがplt.show()、最後のものを使用せずplt.draw()に代わりに試してみると、プロットが表示されません。

これで頑張ってください!

于 2009-12-13T03:19:05.680 に答える