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


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, похоже, ничего не делают. Кто-нибудь знает, в чем может быть проблема?


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

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

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


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

8

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

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

4

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

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

sns.distplot(data),

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


Я забыл создать рисунок ( 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 для визуализации.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.