2017-10-23 10 views
3

後に奇妙な問題がフリーズするとすぐに開くとフリーズする、しかし、このコードをmatplotlib.pyplot.Figure.showは瞬時に

import matplotlib.pyplot as plt 
plt.plot([1, 2, 3], [3, 0, 3]) 
plt.show() 

は、期待どおりグラフウィンドウ(tkaggも)を開きます。私はデバッグしようとしましたが、Visual Studioをpython.exeに接続し、ポーズを打つとVSがクラッシュし、python_d.exeは常にcannot import name 'multiarray'という文句を言います。私はPythonを新しく再インストールしました(すべてのファイルをパージし、Python 3.6.3 x86_64、pip install matplotlibをインストールしています)。 この現象の原因は何ですか?それを修正する方法はありますか?私のシステムについて

詳細情報:2c5fed8のx86_64版をし、2.1.0(REV-IDのb392d46466e98cd6a437e16b52b3ed8de23b0b52を)matplotlibの:私はPythonのv3.6.3でWindows 8.1 x86_64版を実行していますよ。

ソリューション:

import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot([1, 2, 3], [3, 0, 3]) 

root = fig.canvas._tkcanvas.winfo_toplevel() # Get tkinter root 
fig.show() 
root.mainloop() # Enter mainloop 
+0

最初の例でfig.showをplt.showに置き換えてください。私はこれを前に見てきましたが、原因は何か分かりません。おそらく、実行されるスレッドと関係があります。 @DonKirby。 –

答えて

1

私は全く同じ動作を確認しませんが、私は、Python 3.5でテストしています、2.1をmatplotlibの、とUbuntu 16.04。あなたの最初のバージョンを実行すると、プロットウィンドウが非常に短時間開いて表示され、次に閉じます。

しかし、ドキュメントを見ると、2つの例の動作が異なることはあまり驚くことではありません。あなたは2つの異なる方法を呼んでいます。show()最初のバージョンで

、あなたがFigure.show()を呼んでいる:

pyplotとGUIバックエンドを使用している場合、Figureウィンドウを表示します。

番目のバージョンで

、あなたがpyplot.show()を呼んでいる:

は数字がクローズされるまで、すべての図とブロックを表示し、非対話型モードでは...数字を表示...

は、私は2番目の方法を通じて段階、そしてそれは、この基本的に同等です:

fig.show() 
tkinter.mainloop() 

なぜあなたが凍っているのか分かりませんが、最初はあなたが望むものではなかったでしょう。必要に応じてサブプロットを作成しますが、最後にplt.show()を呼び出します。

+0

厳密に言えば、凍結するだけではなく、OPに従ってクラッシュしているわけではありません。おそらく、メインループは決して走らないからです。 –

+0

文言が墜落して凍結するように変更しました。ありがとう、@マド物理学者。 –

+0

あなたの答えに感謝して私の解決策を見つけました。 'FigureManagerTkAgg.show'の' matplotlib/backends/backend_tkagg.py'を見ると、tkinterのルートの 'mainloop()'は呼び出されていないようです。私は私の質問にソリューションコードを追加しました。 – Cubinator73

関連する問題