シーボーンプロットが表示されない


205

とてもシンプルなものを忘れていると確信していますが、特定のプロットをSeabornと連携させることができません。

私が行った場合:

import seaborn as sns

次に、matplotlibを使用して通常どおり作成するプロットは、シーボーンスタイルになります(灰色のグリッドが背景にあります)。

ただし、次の例のいずれかを実行しようとすると、

In [1]: import seaborn as sns

In [2]: sns.set()

In [3]: df = sns.load_dataset('iris')

In [4]: sns.pairplot(df, hue='species', size=2.5)
Out[4]: <seaborn.axisgrid.PairGrid at 0x3e59150>

関数pairplotはPairGridオブジェクトを返しますが、プロットは表示されません。

matplotlibが適切に機能しているようで、Seabornスタイルが他のmatplotlibプロットに適用されているので少し混乱していますが、Seaborn関数は何も実行していないようです。誰が何が問題になるのか考えていますか?


12
ちょっと推測してください... ipythonを使用している場合は%matplotlib inline、インラインバックエンドを指定するために呼び出す必要があります。それ以外の場合は、を呼び出しsns.plt.show()て、プロットを別のウィンドウにレンダリングできます。
Jakob

回答:


360

seabornを使用して作成されたプロットは、通常のmatplotlibプロットのように表示する必要があります。これは、

plt.show()

matplotlibの関数。

もともとはseaborn(sns.plt.show())から既にインポートされているmatplotlibオブジェクトを使用するソリューションを投稿しましたが、これは悪い習慣だと考えられています。したがって、単にmatplotlib.pyplotモジュールを直接インポートし、プロットを表示します

import matplotlib.pyplot as plt
plt.show()

IPython Notebookが使用されている場合は、インラインバックエンドを呼び出して、各プロットの後にshowを呼び出す必要をなくすことができます。それぞれの魔法は

%matplotlib inline

4
対話的に表示されるsnsプロットがまだ表示されません。sns.plt.show()が機能しません。しかし、それをインラインに変更すると、プロットが表示されます(ただし、インタラクティブではありません)。なぜか?
ユーザー3317704

あなたのようなものを使用してバックエンドを指定しようとすることができ%matplotlib qt%matplotlib gtk%matplotlib tk参照などの%matplotlib?詳細については
ヤコブ

17
seabornページの例では、コマンドsns.plt.show()がないのは本当に厄介です。彼らはどうやってこの初歩的なことを忘れることができるのでしょうか?
Michael Hecht

@MichaelHecht plt.show()の欠如はこの問題でどうにか対処されました。そこで苦情に対処するかもしれません。多分彼らはそれをドキュメントに追加します。
ヤコブ

@JakobはJupyter内に(Anaconda経由で)この魔法%matplotlib inlineをある種の構成ファイルに追加して常に適用されるようにする方法はありますか?または、常に新しいワークブックごとに追加する必要がありますか?
whytheq

41

私はこの質問にかなり頻繁にアクセスしており、検索対象を見つけるのに常に時間がかかります。

import seaborn as sns
import matplotlib.pyplot as plt

plt.show()  # <--- This is what you are looking for

注意:Python 2では、 sns.plt.show()、Python 3ではません。

完全な例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Visualize C_0.99 for all languages except the 10 with most characters."""

import seaborn as sns
import matplotlib.pyplot as plt

l = [41, 44, 46, 46, 47, 47, 48, 48, 49, 51, 52, 53, 53, 53, 53, 55, 55, 55,
     55, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58,
     58, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 61,
     61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62,
     62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 65,
     65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66,
     67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70,
     70, 70, 71, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73,
     74, 74, 74, 74, 74, 75, 75, 75, 76, 77, 77, 78, 78, 79, 79, 79, 79, 80,
     80, 80, 80, 81, 81, 81, 81, 83, 84, 84, 85, 86, 86, 86, 86, 87, 87, 87,
     87, 87, 88, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 92,
     92, 93, 93, 93, 94, 95, 95, 96, 98, 98, 99, 100, 102, 104, 105, 107, 108,
     109, 110, 110, 113, 113, 115, 116, 118, 119, 121]

sns.distplot(l, kde=True, rug=False)

plt.show()

与える

ここに画像の説明を入力してください


1
AttributeError: module 'seaborn' has no attribute 'plt'
weberc2 2017年

@ weberc2修正されました。問題はPython 3にのみありましたsns.plt
Martin Thoma

19

混乱を避けるため(コメントにいくつかあるようです)。Jupyterを使用していると仮定します。

%matplotlib inline>プロットを内側に表示しますノート

sns.plt.show()>プロットを外側に表示しますノートブックのの

%matplotlib inlineOVERRIDE sns.plt.show()プロットが表示されますという意味でINしてもノートブックsns.plt.show()と呼ばれています。

そして、はい、あなたの設定に次の行を含めるのは簡単です:

IPython Notebookでインラインで%matplotlibを自動的に実行する

しかし、実際のコードでインポートと一緒に保つ方がより良い慣習のようです。


Sparkノートブックの場合?
テクナジ

8

これは私のために働いた

import matplotlib.pyplot as plt
import seaborn as sns
.
.
.
plt.show(sns)

4

私のアドバイスは、

plt.figure()いくつかのsnsプロットを与えます。例えば

sns.distplot(data)

見た目はプロットは表示されませんが、図を最大化すると、プロットが表示されます。


plt.figure()ラインプロットを作成する前に図()を作成するのを忘れており、プロットが表示されない理由がわかりませんでした。すばらしい、ありがとう!
Sander Vanden Hautte

2

Jupyter Notebookの代わりにIPythonコンソール(を使用できない場所)でプロットし、繰り返し%matplotlib inline実行したくないplt.show()場合は、次のコマンドでIPythonコンソールを起動できますipython --pylab

$ ipython --pylab     
Python 3.6.6 |Anaconda custom (64-bit)| (default, Jun 28 2018, 17:14:51) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: Qt5Agg

In [1]: import seaborn as sns

In [2]: tips = sns.load_dataset("tips")

In [3]: sns.relplot(x="total_bill", y="tip", data=tips) # you can see the plot now

1

コードスニペットのスタイルからわかるように、Jupyter NotebookではなくIPythonを使用していたと思います。

GitHubのこの問題では、チャートの表示が「Jupyterカーネルの場合にのみ機能する」場合にのみグラフの表示が機能することが2016年にIPythonのメンバーによって明らかにされました。したがって、 %matplotlib inlineしません。

私は同じ問題を抱えていましたが、視覚化にはJupyter Notebookを使用することをお勧めします。

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