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

206

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

Если я сделаю:

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>

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

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

robc89
источник
12
Просто быстрое предположение ... если вы используете ipython, вам нужно позвонить, %matplotlib inlineчтобы указать встроенный бэкэнд. В противном случае вы можете вызвать sns.plt.show()рендеринг сюжета в отдельное окно.
Якоб

Ответы:

362

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

plt.show()

функция из matplotlib.

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

import matplotlib.pyplot as plt
plt.show()

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

%matplotlib inline
Jakob
источник
4
Я до сих пор не вижу сюжет sns в интерактивном режиме. sns.plt.show () не работает. Но когда я изменяю его на встроенный, я получаю сюжет (но не в интерактивном режиме). Есть идеи почему?
пользователь 3317704
Вы могли бы попытаться определить бэкенд использовать что - то вроде %matplotlib qt, %matplotlib gtk, и %matplotlib tkт.д. см %matplotlib?для получения дополнительной информации
Якоба
17
Действительно раздражает, что в примерах на странице seaborn нет команды sns.plt.show (). Как они могут забыть что-то такое элементарное?
Майкл Хехт
@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
@ weberc2 Исправлено. Проблема была только в Python 3, которого нетsns.plt
Мартин Тома
19

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

%matplotlib inline> отображает графики внутри ноутбука

sns.plt.show()> отображает графики вне тетради

%matplotlib inlineбудет ПЕРЕОПРЕДЕЛЕНИЕ sns.plt.show() в том смысле , что участки будут показаны В записной книжке, даже еслиsns.plt.show() называется.

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

Автоматически запускать% matplotlib inline в IPython Notebook

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

mikkokotila
источник
Для искровых ноутбуков?
технази
8

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

import matplotlib.pyplot as plt
import seaborn as sns
.
.
.
plt.show(sns)
EMON
источник
4

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

plt.figure()и дать немного сюжета sns. Например

sns.distplot(data),

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

пользователь 3317704
источник
Я забыл создать рисунок ( plt.figure()) перед созданием линейного сюжета и не понял, почему сюжет не появился. Отлично, спасибо!
Сандер Ванден Hautte
2

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

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

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

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

Вайси Жан
источник