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


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

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

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

5 110

5 ответов:

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

plt.show()

функция от matplotlib.

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

import matplotlib.pyplot as plt
plt.show()

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

%matplotlib inline

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

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

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

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

sns.plt.show() > отображает участки за пределами ноутбука

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

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

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

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

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

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

sns.distplot(data).

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

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

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

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