web-dev-qa-db-ja.com

Pycharmはプロットを表示しません

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)]'}
69
Rasmus Larsen

同じ問題がありました。 plt.isinteractive()がTrueかどうかを確認します。それを「False」に設定することは助けになりました。

plt.interactive(False)
31
DanT

ただ使う

plt.show()

それはトリックを行いますが、理由はわかりません。

53
Amit Lohan

これは古いことはわかっていますが、他の旅行者の誤解を解くと思いました。 plt.pyplot.isinteractive()Falseに設定すると、プロットは描画する特定のコマンドで描画されます(つまり、plt.pyplot.show())。 plt.pyplot.isinteractive()Trueに設定すると、すべてのpyplotplt)コマンドが描画コマンド(つまり、plt.pyplot.show())をトリガーします。あなたが探していたのは、グラフを表示するプログラムの最後にあるplt.pyplot.show()です。

補足として、import matplotlib.pyplot as pltではなく、次のインポートコマンドmatplotlib as pltを使用して、これらのステートメントを少し短くすることができます。

46
user3915686

さまざまな解決策を試しましたが、最終的に私にとってうまくいったのはplt.show(block=True)でした。これを有効にするには、myDataFrame.plot()コマンドの後にこのコマンドを追加する必要があります。複数のプロットがある場合は、コードの最後にコマンドを追加するだけです。プロットしているすべてのデータを見ることができます。

25
import matplotlib
matplotlib.use('TkAgg')

私のために働く。 (PyCharm/OSX)

16
Joe Bobson

私は解決策を見つけました。これは私のために働いた:

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()
13
Dhruv

私のバージョンの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)
10
tairen

私にとって問題は、matplotlibが間違ったバックエンドを使用していたという事実でした。 Debian Jessieを使用しています。

コンソールで次のことを行いました。

import matplotlib
matplotlib.get_backend()

結果は「agg」でしたが、これは「TkAgg」でなければなりません。

解決策は簡単でした:

  1. Pip経由でmatplotlibをアンインストールします
  2. 適切なライブラリをインストールします。sudoapt-get install tcl-dev tk-dev python-tk python3-tk
  3. Pipを使用してmatplotlibを再度インストールします。
5
Arie

plt.pyplot.show()を追加するだけで問題ありません。

最善の解決策は、SciViewを無効にすることです。

5
Taki Guan

電話してすぐに

plt.imshow() 

コール

plt.show(block = True)

画像とともにmatplotlibポップアップが表示されます。

これはブロッキングの方法です。それ以降のスクリプトは、ポップが閉じられるまで実行されません。

4
Sudeep K Rana

私のバージョンの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)
3
m4ndy

私の環境:macOSとanaconda3

これは私のために働く:

matplotlib.use('macosx')

または対話モード:

matplotlib.use('TkAgg')
2
Zoe L

私の場合、次のことをしたかったのです。

    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では、すべてのコマンドが私の場合に必要なようです。ご挨拶!

1
Marc Torrellas

初心者には、通常の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
1
Nathan W

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)

グラフィックを正しく表示します。

1
Bastiaan

非インタラクティブ環境では、plt.show(block = True)を使用する必要があります

1
tkr_in

上記のどれも私にとってはうまくいきませんでしたが、次のことはうまくいきました:

  1. Pycharm settings > Tools > Python Scientificのチェックボックス(ツールウィンドウにプロットを表示)を無効にします。
  2. エラーNo PyQt5 module foundを受け取りました。以下を使用してPyQt5のインストールを進めました。

    Sudo apt-get install python3-pyqt5
    
1

私はUbuntuを使用していますが、@ Arieが上記のように試しましたが、この行はターミナルでのみ:

Sudo apt-get install tcl-dev tk-dev python-tk python3-tk

そしてうまくいきました!

0
Farouk Fadly

インポートを変更:

import matplotlib.pyplot as plt

または、次の行を使用します。

plt.pyplot.show()
0
Mise

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()
0
Nilesh Shinde

IDE内でスクリプトを実行している(およびpythonコンソールやノートブックなどの対話型環境で作業していない)人にとっては、これが最も直感的であり、最も簡単な解決策:

plt.imshow(img)
plt.waitforbuttonpress()

図が表示され、ユーザーが新しいウィンドウをクリックするまで待機します。その後、スクリプトを再開し、残りのコードを実行します。

0
Azim