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


100

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

6
動作しplt.pyplot.show()ますか?
Padraic Cunningham 2014

1
ありません。正確に「plt.pyplot.show()」を実行すると機能しません。「pyplot」の代わりに何か他のものを書くべきですか?(ここでnoob)。
Rasmus Larsen

pycharmでコードを実行するとどうなりますか?
Padraic Cunningham 2014

ファイルを実行すると、同じことが起こります。ウィンドウがすぐに表示されて消え、コンソールに出力されます。プロセスは終了コード0で終了しました。コンソールに送信すると、ウィンドウは表示されたままですが、ウィンドウに何も描画されず、ただ白いだけです。ウィンドウのラベルは「図1(応答なし)」
Rasmus Larsen

視覚化するには、matplotlib.pyplotを追加する必要があります。参照:stackoverflow.com/a/29042575/4989929
Ronak Poriya '25

回答:


103

使うだけ

plt.show()

このコマンドは、Pycharmでプロットを描画するようにシステムに指示します。

例:

plt.imshow(img.reshape((28, 28)))
plt.show()

4
それは本当に素晴らしいです-これは私のために働きました、そして他の誰もしませんでした。驚いたのは、Jupyter Notebookでplt.show()が必要なかった、PyCharmで動作が異なる理由は不明
Ambareesh

こっちも一緒。Jupyter Notebookでは必要ありませんでした
貧乏人

私もいつもそれを呼ぶのを忘れています。これは、システムに実際にpycharmで描画するように指示します。Notebookは、デフォルトで描画および印刷機能を自動的に呼び出します。プロトタイピングを速くするためにそのように作られたと思います。
MNM

plt.draw()後で図を更新しているので、使用する必要がある場合はどうなりますか?plt.show()正常に動作しますがplt.draw()、PyCharmには何も表示されません。
CGFoX

1
このようなことをしたので、ノートブックでは必要ないかもしれません%matplotlib inline。@CGFox、ドローは明示的にメモリにレンダリングすることを意味しますが、画面(またはファイル)には表示しません。プロットを表示するには、plt.pause(0.1)を使用するか、コードの他の場所でplt.show(pause = True)を呼び出して、プロットをレンダリングする必要があります
xaviersjs

54

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

注意点としては、次のimportコマンドを使用して、これらの文を少し短くすることができるimport matplotlib.pyplot as pltのではなくmatplotlib as plt


14
関数の最後にplt.show(block = True)を追加すると、うまくいきます。説明していただきありがとうございます。(Python 3.x、PyCharm 2016.1.4、Ubuntu)
SummerEla

これは私のために働くものです(Python 2.7、Pycharm 2016.3、Ubuntu 16.04):「matplotlib.pyplotをpltとしてインポート」、次に「corr_data [col] .plot(kind = "bar」、figsize =のようなDataFrameから関数プロット(8、5)、grid = True、color = "r"、title = col) "、関数を終了する前に" plt.show() "
Taka

34

私も同じ問題を抱えていました。plt.isinteractive()Trueかどうかを確認します。「False」に設定すると役に立ちました。

plt.interactive(False)

9
plt.show(block = True)を呼び出すと、チャートが一度表示されました。しかし、チャートウィンドウを閉じた後でも、コンソールはブロックされていました。
DanT

plt.interactive(False)はPyCharmで私のためにそれをしました
幻想的な

Pythonをインストールしていないので、Pythonが機能するかどうかはわかりませんが、他の人でも機能するので、この回答を受け入れます(stackoverflow-rulesに従ってこれが正しいことを願っています)
Rasmus Larsen

8
正しい解決策は、@ charlieが以下に提案したようにplt.show(block = True)を設定することです。この行を追加した後、plt.interactive()フラグの値は、表示されているプロットに影響しませんでした。
凍傷、

これは私にとってはうまくいきませんでした `範囲内のcluster_id(len(tempx [0])):plt.plot(tempx、tempy、 'rx--'、markerize = 8)plt.legend(loc = 4、framealpha = 0.5)plt.interactive(False)plt.show(block = True) `
Mona Jalal

29

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


2
これでうまくいきました。受け入れられる答えでなければなりません。plt.interactive()をいじっても何も
凍傷

これも私に役立ったので同意します。対話モードをFalseに設定し、環境変数に "DISPLAY = TRUE"を追加しても効果がありませんでした。
ファビオ2017年

22
import matplotlib
matplotlib.use('TkAgg')

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


これはplt.show()、PyCharmの新しいバージョン(2020.1)でもう役に立たなかったWindows 10でも機能しました。
コービー

14

私のバージョンのPycharm(コミュニティエディション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)

ごめんなさい。Pycharm 2017.3(コミュニティ版)でも機能することがわかりました。新しいバージョンのPycharmを使ってみませんか?
大連

こんにちは、サリア、申し訳ありません。私はPycharm 2018.1.2(コミュニティエディション)でUbuntu OSを使用してテストします。それも動作します。
大連

こんにちは、Pycharm 2019.3とMacOs Catalinaで動作します
Milad nourizade

13

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

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

しかし、私は今、新たな問題に直面しています。プロットが新しいウィンドウで生成されると、新しく開いたウィンドウを閉じるまで、プロットの後に追加した新しいコードは実行されません。
Dhruv、

2
質問で欠落していた重要な行はplt.show()です
Yoav

6

電話してすぐ

plt.imshow() 

コール

plt.show(block = True)

画像付きのmatplotlibポップアップが表示されます。

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


これは私が探していたものです。
NelsonGon

5

私にとっての問題は、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

を追加するだけで構いplt.pyplot.show()ません。

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


4

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

4

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

  1. pycharmのチェックボックス(ツールウィンドウにプロットを表示)を無効にしますsettings > Tools > Python Scientific

  2. エラーを受け取りましたNo PyQt5 module foundPyQt5使用のインストールを先に進めました:

    sudo apt-get install python3-pyqt5

いくつかの最初のステップだけで十分であり、機能することに注意してください。


1
最初のステップが解決策になる可能性があることを明確にしてください。このように述べると、@ amir1122の他の繰り返し回答には、存在する権利があります。もちろん、それでも問題ありません。あなたはまだ私の賛成票を獲得しています。
ローレンツ

1
@ローレンツ。意味のあるあなたの提案に従って更新されました。
AbdulRehmanLiaqat

ステップ1は機能しますが、回避策のように感じます。私の場合は、Pythonの複数のバージョン(3.6、3.7、および3.8)が浮いているためだと思います。
Josiah Yoder

2

私の環境:macOS&anaconda3

これは私にとってはうまくいきます:

matplotlib.use('macosx')

またはインタラクティブモード:

matplotlib.use('TkAgg')

matplotlib.pyplotをインポートする前にこれを追加します
Zoe L

2

私はこの問題を抱えていたので、解決できました。自分の方法でテストできます。設定から[ツールウィンドウにプロットを表示]を無効にしてください->ツール-> python科学


1
この回答は2年前にすでに提供されています(例:stackoverflow.com/a/52221178/466862)。古い質問に答えるときは、新しい別の解決策か、非常に優れた説明のいずれかに答えてください。
Mark Rotteveel

これは@AbdulRehmanLiaqatの答えを繰り返していますが、これは可能な解決策になる可能性があることを少なくとも明確に述べています。繰り返しのため、私は最初にこれに反対票を入れました。ここで私は賛成票を投じました。これは、他の回答がこの1つのステップですでに解決できることを明確に述べていないため、代わりに、私の場合には表示されなかったエラーについて後で言及しています。
ローレンツ

1

DanTからのコメントは、私のためにこれを修正しました。GTKaggバックエンドを使用するLinux上のpycharmを使用したmatplotlibです。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

私の場合、私は次のことをしたいと思いました:

    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

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


1

IDE内でスクリプトを実行している(Pythonコンソールやノートブックなどのインタラクティブな環境で作業していない)場合は、これが最も直感的で最も簡単なソリューションであることがわかりました。

plt.imshow(img)
plt.waitforbuttonpress()

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


1

他のいくつかの提案の組み合わせをここで機能させることができましたが、plt.interactive(False)to Trueとback を切り替えながらのみです。

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

0

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

インポートを次のように変更します。

import matplotlib.pyplot as plt

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

plt.pyplot.show()

0

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

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

そしてそれはうまくいった!


0

Pycharmでは、Matplotlib.plotが表示されない場合があります。

したがってplt.show()、SciViewの右側のツールバーでcheckを呼び出した後。SciView内には、生成されたすべてのプロットが保存されます。


0

ヒストグラムをプロットしようとするとエラーが発生し、ポイントの下がうまくいきました。

OS:Mac Catalina 10.15.5

Pycharmバージョン:コミュニティバージョン2019.2.3

Pythonバージョン:3.7

  1. importステートメントを次のように変更しました(-から)

から:

import matplotlib.pylab as plt

に:

import matplotlib.pyplot as plt

  1. そして、ステートメントを以下にプロットします(私のコマンド形式のpyplotをpltに変更しました)

から:

plt.pyplot.hist(df["horsepower"])

# set x/y labels and plot title
plt.pyplot.xlabel("horsepower")
plt.pyplot.ylabel("count")
plt.pyplot.title("horsepower bins") 

へ:

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. plt.showを使用してヒストグラムを表示する

plt.show()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.