Pycharmは、次のコードのプロットを表示しません。
import pandas as pd
import numpy as np
import matplotlib as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
ts.plot()
何が起こるかというと、ウィンドウは1秒未満で表示され、その後再び表示されなくなります。
Pyzo IEP IDE(同じインタープリターを使用)を同じコードで使用すると、プロットが期待どおりに表示されます。
...そのため、Pycharmの設定に問題があるはずです。 python.exeとpythonw.exeの両方をインタープリターとして使用してみましたが、どちらも同じ結果になりました。
これは私のsys_infoです:
C:\pyzo2014a\pythonw.exe -u C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.4.1\helpers\pydev\pydevconsole.py 57315 57316
PyDev console: using IPython 2.1.0import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, 13:02:30) [MSC v.1600 64 bit (AMD64)] on win32
sys.path.extend(['C:\\Users\\Rasmus\\PycharmProjects\\untitled2'])
In[3]: import IPython
print(IPython.sys_info())
{'commit_hash': '681fd77',
'commit_source': 'installation',
'default_encoding': 'UTF-8',
'ipython_path': 'C:\\pyzo2014a\\lib\\site-packages\\IPython',
'ipython_version': '2.1.0',
'os_name': 'nt',
'platform': 'Windows-8-6.2.9200',
'sys_executable': 'C:\\pyzo2014a\\pythonw.exe',
'sys_platform': 'win32',
'sys_version': '3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, '
'13:02:30) [MSC v.1600 64 bit (AMD64)]'}
同じ問題がありました。 plt.isinteractive()
がTrueかどうかを確認します。それを「False」に設定することは助けになりました。
plt.interactive(False)
ただ使う
plt.show()
それはトリックを行いますが、理由はわかりません。
これは古いことはわかっていますが、他の旅行者の誤解を解くと思いました。 plt.pyplot.isinteractive()
をFalse
に設定すると、プロットは描画する特定のコマンドで描画されます(つまり、plt.pyplot.show()
)。 plt.pyplot.isinteractive()
をTrue
に設定すると、すべてのpyplot
(plt
)コマンドが描画コマンド(つまり、plt.pyplot.show()
)をトリガーします。あなたが探していたのは、グラフを表示するプログラムの最後にあるplt.pyplot.show()
です。
補足として、import matplotlib.pyplot as plt
ではなく、次のインポートコマンドmatplotlib as plt
を使用して、これらのステートメントを少し短くすることができます。
さまざまな解決策を試しましたが、最終的に私にとってうまくいったのはplt.show(block=True)
でした。これを有効にするには、myDataFrame.plot()
コマンドの後にこのコマンドを追加する必要があります。複数のプロットがある場合は、コードの最後にコマンドを追加するだけです。プロットしているすべてのデータを見ることができます。
import matplotlib
matplotlib.use('TkAgg')
私のために働く。 (PyCharm/OSX)
私は解決策を見つけました。これは私のために働いた:
import numpy as np
import matplotlib.pyplot as plt
points = np.arange(-5, 5, 0.01)
dx, dy = np.meshgrid(points, points)
z = (np.sin(dx)+np.sin(dy))
plt.imshow(z)
plt.colorbar()
plt.title('plot for sin(x)+sin(y)')
plt.show()
私のバージョンのPycharm(Community Edition 2017.2.2)でテストしますが、plt.interactive(False)とplt.show(block = True)の両方を次のようにアナウンスする必要がある場合があります。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6.28, 100)
plt.plot(x, x**0.5, label='square root')
plt.plot(x, np.sin(x), label='sinc')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("test plot")
plt.legend()
plt.show(block=True)
plt.interactive(False)
私にとって問題は、matplotlibが間違ったバックエンドを使用していたという事実でした。 Debian Jessieを使用しています。
コンソールで次のことを行いました。
import matplotlib
matplotlib.get_backend()
結果は「agg」でしたが、これは「TkAgg」でなければなりません。
解決策は簡単でした:
plt.pyplot.show()
を追加するだけで問題ありません。
最善の解決策は、SciViewを無効にすることです。
電話してすぐに
plt.imshow()
コール
plt.show(block = True)
画像とともにmatplotlibポップアップが表示されます。
これはブロッキングの方法です。それ以降のスクリプトは、ポップが閉じられるまで実行されません。
私のバージョンのPyCharm 2017.1.2でテストしました。インタラクティブ(True)と表示(block = True)を使用しました。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1//2000',periods=1000))
ts = ts.cumsum()
plt.interactive(True)
ts.plot()
plt.show(block=True)
私の環境:macOSとanaconda3
これは私のために働く:
matplotlib.use('macosx')
または対話モード:
matplotlib.use('TkAgg')
私の場合、次のことをしたかったのです。
plt.bar(range(len(predictors)), scores)
plt.xticks(range(len(predictors)), predictors, rotation='vertical')
plt.show()
ここでのソリューションの混合に続いて、私のソリューションはその前に次のコマンドを追加することでした:
matplotlib.get_backend()
plt.interactive(False)
plt.figure()
次の2つのインポート
import matplotlib
import matplotlib.pyplot as plt
ElCapitanとPyCharm 2016.2.3のMBPでは、すべてのコマンドが私の場合に必要なようです。ご挨拶!
初心者には、通常のPythonコードとしてではなく、 コンソールでスクリプトを実行する であることを確認することもできます。 コードの一部を強調表示して実行する はかなり簡単です。
私はここで他のいくつかの提案の組み合わせを得ることができましたが、それはplt.interactive(False)
をTrue
に切り替えて再び戻す間だけでした。
plt.interactive(True)
plt.pyplot.show()
これにより、プロットがフラッシュされます。次に、False
に設定すると表示が許可されます。
plt.interactive(False)
plt.pyplot.show()
前述のように、私のプログラムはすべてのウィンドウが閉じるまで終了しませんでした。現在の実行環境の詳細は次のとおりです。
Python version 2.7.6
Anaconda 1.9.2 (x86_64)
(default, Jan 10 2014, 11:23:15)
[GCC 4.0.1 (Apple Inc. build 5493)]
Pandas version: 0.13.1
DanTからのコメントは、これを修正しました。GTKaggバックエンドを備えたLinuxで、matplotlibとpycharmを使用して修正しました。 matplotlibをインポートすると、次のエラーが表示されます。
>>> import matplotlib as mpl
Backend GTKAgg is interactive backend. Turning interactive mode on.
Failed to enable GUI event loop integration for 'gtk'
次のようにプロットする場合:
from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()
図画面がポップアップしますが、チャートは表示されません。使用して:
plt.show(block=True)
グラフィックを正しく表示します。
非インタラクティブ環境では、plt.show(block = True)を使用する必要があります
上記のどれも私にとってはうまくいきませんでしたが、次のことはうまくいきました:
settings > Tools > Python Scientific
のチェックボックス(ツールウィンドウにプロットを表示)を無効にします。エラーNo PyQt5 module found
を受け取りました。以下を使用してPyQt5
のインストールを進めました。
Sudo apt-get install python3-pyqt5
私はUbuntuを使用していますが、@ Arieが上記のように試しましたが、この行はターミナルでのみ:
Sudo apt-get install tcl-dev tk-dev python-tk python3-tk
そしてうまくいきました!
インポートを変更:
import matplotlib.pyplot as plt
または、次の行を使用します。
plt.pyplot.show()
pycharmに1つのプロパティを設定する必要があります。
import matplotlib.pyplot as plt
plt.interactive(False) #need to set to False
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
IDE内でスクリプトを実行している(およびpythonコンソールやノートブックなどの対話型環境で作業していない)人にとっては、これが最も直感的であり、最も簡単な解決策:
plt.imshow(img)
plt.waitforbuttonpress()
図が表示され、ユーザーが新しいウィンドウをクリックするまで待機します。その後、スクリプトを再開し、残りのコードを実行します。