web-dev-qa-db-ja.com

海鳥プロットが表示されない

非常に単純なことを忘れていることは間違いありませんが、特定のプロットをSeabornで機能させることはできません。

私が行った場合:

import seaborn as sns

それから私がmatplotlibを使っていつものように作成するプロットは、Seabornスタイル(背景の灰色のグリッド)を取得します。

しかし、私が例の1つをやろうとすると:

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関数は何もしないようです。誰が問題となる可能性があるかについて何か考えがありますか?

143
robc89

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

plt.show()

matplotlibからの関数です。

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

import matplotlib.pyplot as plt
plt.show()

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

%matplotlib inline
250
Jakob

私はこの質問にかなり定期的に出くわします、そして私が検索したものを見つけるのにいつも時間がかかります:

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

与える

enter image description here

20
Martin Thoma

混乱を避けるため(コメントに多少のコメントがあるようです)。あなたがJupyterにいると仮定します。

%matplotlib inline>プロットを表示します _ _ ノートブック

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

プロットが表示されるという意味で%matplotlib inlineOVERRIDEsns.plt.show()INsns.plt.show()が呼び出されてもノートブックを表示します。

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

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

しかし、実際のコードではインポートと一緒にしておくほうがよい慣習と思われます。

14
mikkokotila

私のアドバイスはただ

plt.figure()といくつかのSNSプロットを与える。例えば

sns.distplot(data)

それはそれがどんなプロットも表示しないように見えますが、あなたが図を最大化するとき、あなたはプロットを見ることができるでしょう。

4
user 3317704

Jupyterノートブックの代わりにIPython console%matplotlib inlineを使うことはできません)でプロットし、plt.show()を繰り返し実行したくない場合は、ipython --pylabを使ってIPythonコンソールを起動できます。

$ 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
Chad

あなたのコードスニペットのスタイルから言うと、Jupyter NotebookではなくIPythonを使っていたと思います。

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

私はちょうど同じ問題を抱えていました、そして視覚化のためにあなたがJupyter Notebookを使うことを提案します。

0
Weisi Zhan

これは私のために働きました

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