Земельні ділянки не відображаються


205

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


12
Просто швидка здогадка ... якщо ви використовуєте ipython, вам потрібно зателефонувати, %matplotlib inlineщоб вказати вбудований сервер. В іншому випадку ви можете зателефонувати, sns.plt.show()щоб зробити сюжет у окремому вікні.
Якоб

Відповіді:


360

Сюжети, створені за допомогою новонароджених, повинні відображатися як звичайні сюжети з маплотлібом. Це можна зробити за допомогою

plt.show()

функція від matplotlib.

Спочатку я розмістив рішення про використання вже імпортного об'єкта matplotlib від seaborn ( sns.plt.show()), однак це вважається поганою практикою. Тому просто імпортуйте модуль matplotlib.pyplot і покажіть свої ділянки

import matplotlib.pyplot as plt
plt.show()

Якщо використовується ноутбук IPython, вбудований вбудований сервер може бути застосований для усунення необхідності виклику шоу після кожного сюжету. Відповідна магія є

%matplotlib inline

4
Я досі не отримую sns-сюжет, показаний інтерактивно. sns.plt.show () не працює. Але коли я змінюю його на інлайн, я отримую сюжет (але не інтерактивно). Будь-яка ідея чому?
користувач 3317704

Ви могли б спробувати визначити бекенд використовувати що - щось на зразок %matplotlib qt, %matplotlib gtk, і %matplotlib tkт.д. см %matplotlib?для отримання додаткової інформації
Якоба

17
Це дуже прикро, що в прикладах на сторінці у новонароджених немає команди sns.plt.show (). Як вони можуть забути щось таке елементарне?
Майкл Гехт

@MichaelHecht Недолік plt.show () був якимось чином вирішений у цьому питанні , ви можете вирішити свої скарги там. Можливо, вони додадуть його до документів.
Якоб

@Jakob Чи існує спосіб в Jupyter (через Anaconda) додати цю магію %matplotlib inlineдо деякого числа файлу конфігурації, щоб він завжди застосовувався? Або мені завжди потрібно додавати його до кожної нової робочої книги?
чомуз

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

Щоб уникнути плутанини (як здається, у коментарях є деякі). Якщо припустити, що ви перебуваєте на Юпітері:

%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()) перед тим, як зробити свою лінійку і не зрозумів, чому сюжет не відображається. Відмінно, дякую!
Sander Vanden 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 учасник IPython в 2016 році зрозумів, що показ діаграм буде працювати лише тоді, коли "працює лише тоді, коли це ядро ​​Jupyter". Таким чином, %matplotlib inlineне буде працювати.

У мене був просто той самий випуск і пропоную вам використовувати зошит Jupyter для візуалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.