Морские участки не появляются

Я уверен, что забываю что-то очень простое, но я не могу получить определенные сюжеты для работы с Seaborn.

Если я это сделаю:

import seaborn as sns

Затем любые графики, которые я создаю, как обычно, с matplotlib, получают стиль Seaborn (с серой сеткой в ​​фоновом режиме).

Однако, если я попытаюсь сделать один из примеров, например:

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>

Функция parplot возвращает объект PairGrid, но график не отображается.

Я немного смущен, потому что matplotlib, кажется, работает правильно, и стили Seaborn применяются к другим графикам matplotlib, но функции Seaborn, похоже, ничего не делают. Кто-нибудь знает, что может быть проблемой?

Ответ 1

Графики, созданные с использованием морского дерева, должны отображаться как обычные графики matplotlib. Это можно сделать с помощью

plt.show()

от matplotlib.

Изначально я опубликовал решение использовать уже импортированный объект matplotlib из морского дерева (sns.plt.show()), однако это считается плохой практикой. Поэтому просто импортируйте модуль matplotlib.pyplot и покажите свои графики с помощью

import matplotlib.pyplot as plt
plt.show()

Если используется ноутбук IPython, встроенный backend может быть вызван, чтобы удалить необходимость вызова show после каждого графика. Соответствующая магия

%matplotlib inline

Ответ 2

Я регулярно отвечаю на этот вопрос, и мне всегда нужно время, чтобы найти то, что я ищу:

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

Ответ 3

Чтобы избежать путаницы (как, кажется, в комментариях есть некоторые). Предполагая, что вы находитесь на Jupyter:

%matplotlib inline > отображает графики ВНУТРИ ноутбука

sns.plt.show() > отображает графики ВНЕШНИЕ ноутбука

%matplotlib inline будет OVERRIDE sns.plt.show() в том смысле, что на графиках будет отображаться IN блокнот, даже когда вызывается sns.plt.show().

И да, легко включить строку в вашу конфигурацию:

Автоматически запускать% matplotlib встроенный в IPython Notebook

Но, похоже, лучшее соглашение, чтобы сохранить его вместе с импортом в реальном коде.

Ответ 4

Мой совет - просто дать

plt.figure() и дайте некоторый график sns. Например

sns.distplot(data).

Хотя это будет выглядеть, он не показывает какой-либо сюжет. Когда вы максимизируете фигуру, вы сможете увидеть сюжет.

Ответ 5

Если вы печатаете в консоли IPython (где вы не можете использовать %matplotlib inline) вместо записной книжки Jupyter и не хотите plt.show() запускать 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

Ответ 6

Судя по стилю вашего фрагмента кода, я полагаю, вы использовали IPython, а не Jupyter Notebook.

В этом выпуске GitHub в 2016 году один из участников IPython дал понять, что отображение диаграмм будет работать только тогда, когда "работает только в ядре Jupyter". Таким образом, %matplotlib inline не будет работать.

У меня просто возникла та же проблема, и я предлагаю вам использовать Jupyter Notebook для визуализации.

Ответ 7

Это сработало для меня

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