Plot Seaborn tidak muncul

205

Saya yakin saya melupakan sesuatu yang sangat sederhana, tetapi saya tidak dapat membuat plot tertentu untuk bekerja dengan Seaborn.

Jika aku melakukan:

import seaborn as sns

Kemudian setiap plot yang saya buat seperti biasa dengan matplotlib mendapatkan gaya Seaborn (dengan kotak abu-abu di latar belakang).

Namun, jika saya mencoba melakukan salah satu contoh, seperti:

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>

Fungsi pairplot mengembalikan objek PairGrid, tetapi plot tidak muncul.

Saya sedikit bingung karena matplotlib tampaknya berfungsi dengan baik, dan gaya Seaborn diterapkan pada plot matplotlib lainnya, tetapi fungsi Seaborn tampaknya tidak melakukan apa-apa. Adakah yang tahu apa masalahnya?

robc89
sumber
12
Tebakan cepat ... jika Anda menggunakan ipython, Anda perlu menelepon %matplotlib inlineuntuk menentukan backend inline. Kalau tidak, Anda bisa menelepon sns.plt.show()untuk membuat plot ke jendela terpisah.
Jakob

Jawaban:

360

Plot yang dibuat menggunakan seaborn perlu ditampilkan seperti plot matplotlib biasa. Ini dapat dilakukan dengan menggunakan

plt.show()

fungsi dari matplotlib.

Awalnya saya memposting solusi untuk menggunakan objek matplotlib yang sudah diimpor dari seaborn ( sns.plt.show()) namun ini dianggap praktik yang buruk. Oleh karena itu, cukup impor modul matplotlib.pyplot secara langsung dan perlihatkan plot Anda

import matplotlib.pyplot as plt
plt.show()

Jika notebook IPython digunakan backend inline dapat dipanggil untuk menghapus perlunya memanggil acara setelah setiap plot. Sihir masing-masing adalah

%matplotlib inline
Jakob
sumber
4
Saya masih belum mendapatkan plot sns yang ditampilkan secara interaktif. sns.plt.show () tidak berfungsi. Tetapi ketika saya mengubahnya menjadi inline, saya mendapatkan plot (tetapi tidak secara interaktif). Ada yang tahu kenapa?
pengguna 3317704
Anda bisa mencoba untuk menentukan backend menggunakan sesuatu seperti %matplotlib qt, %matplotlib gtk, %matplotlib tkdll lihat %matplotlib?untuk informasi lebih lanjut
Jakob
17
Benar-benar menjengkelkan bahwa pada contoh di halaman seaborn tidak ada perintah sns.plt.show (). Bagaimana mereka bisa melupakan sesuatu yang elementer ini?
Michael Hecht
@MichaelHecht Kurangnya plt.show () entah bagaimana ditangani dalam masalah ini , Anda dapat mengatasi keluhan Anda di sana. Mungkin mereka akan menambahkannya ke dokumen.
Jakob
@ Jakob apakah ada cara di dalam Jupyter (via Anaconda) untuk menambahkan sihir ini %matplotlib inlineke beberapa file konfigurasi sehingga selalu diterapkan? Atau apakah saya selalu perlu menambahkannya ke setiap buku kerja baru?
whytheq
41

Saya sampai pada pertanyaan ini secara teratur dan saya selalu membutuhkan waktu untuk menemukan apa yang saya cari:

import seaborn as sns
import matplotlib.pyplot as plt

plt.show()  # <--- This is what you are looking for

Harap dicatat: Dalam Python 2, Anda juga dapat menggunakan sns.plt.show(), tetapi tidak dalam Python 3.

Contoh Lengkap

#!/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()

Memberi

masukkan deskripsi gambar di sini

Martin Thoma
sumber
1
AttributeError: module 'seaborn' has no attribute 'plt'
weberc2
@ weberc2 Diperbaiki. Masalahnya hanya di Python 3, yang tidak memilikisns.plt
Martin Thoma
19

Untuk menghindari kebingungan (sepertinya ada beberapa di komentar). Dengan asumsi Anda berada di Jupyter:

%matplotlib inline> menampilkan plot DI DALAM notebook

sns.plt.show()> menampilkan plot DI LUAR notebook

%matplotlib inlineakan OVERRIDE sns.plt.show() dalam arti bahwa plot akan ditampilkan DI notebook bahkan ketika sns.plt.show()dipanggil.

Dan ya, mudah untuk memasukkan baris ke konfigurasi Anda:

Secara otomatis menjalankan% matplotlib inline di IPython Notebook

Tetapi tampaknya konvensi yang lebih baik untuk tetap bersama dengan impor dalam kode aktual.

mikkokotila
sumber
Untuk buku catatan percikan?
technazi
8

Ini berhasil untuk saya

import matplotlib.pyplot as plt
import seaborn as sns
.
.
.
plt.show(sns)
emon
sumber
4

Saran saya hanya memberi a

plt.figure()dan berikan beberapa plot sns. Sebagai contoh

sns.distplot(data).

Meskipun akan terlihat tidak menunjukkan plot apa pun, Ketika Anda memaksimalkan gambar, Anda akan dapat melihat plot.

pengguna 3317704
sumber
Saya lupa membuat gambar ( plt.figure()) sebelum membuat lineplot saya dan tidak mengerti mengapa plotnya tidak muncul. Luar biasa terima kasih!
Sander Vanden Hautte
2

Jika Anda merencanakan di konsol IPython (di mana Anda tidak dapat menggunakan %matplotlib inline) alih-alih notebook Jupyter, dan tidak ingin menjalankan plt.show()berulang kali, Anda dapat memulai konsol IPython dengan 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
Chad
sumber
1

Dari gaya potongan kode Anda, saya kira Anda menggunakan IPython daripada Jupyter Notebook.

Dalam edisi ini di GitHub, diperjelas oleh anggota IPython pada tahun 2016 bahwa tampilan grafik hanya akan berfungsi ketika "hanya berfungsi jika kernel Jupyter". Dengan demikian, %matplotlib inlinetidak akan berhasil.

Saya baru saja mengalami masalah yang sama dan menyarankan Anda menggunakan Jupyter Notebook untuk visualisasi.

Weisi Zhan
sumber