Lô biển không hiển thị


205

Tôi chắc chắn rằng tôi đã quên một cái gì đó rất đơn giản, nhưng tôi không thể có được những âm mưu nhất định để làm việc với Seaborn.

Nếu tôi làm:

import seaborn as sns

Sau đó, bất kỳ lô nào tôi tạo như bình thường với matplotlib đều có kiểu dáng Seaborn (với lưới màu xám ở nền).

Tuy nhiên, nếu tôi cố gắng thực hiện một trong các ví dụ, chẳng hạn như:

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>

Hàm cặp đôi trả về một đối tượng PairGrid, nhưng cốt truyện không hiển thị.

Tôi hơi bối rối vì matplotlib dường như hoạt động tốt và các kiểu Seaborn được áp dụng cho các lô matplotlib khác, nhưng các chức năng của Seaborn dường như không làm gì cả. Có ai có bất kỳ ý tưởng những gì có thể là vấn đề?


12
Chỉ cần đoán nhanh ... nếu bạn đang sử dụng ipython, bạn cần gọi %matplotlib inlineđể chỉ định phụ trợ nội tuyến. Nếu không, bạn có thể gọi sns.plt.show()để kết xuất cốt truyện vào một cửa sổ riêng.
Jakob

Câu trả lời:


360

Các ô được tạo bằng cách sử dụng seaborn cần được hiển thị như các ô matplotlib thông thường. Điều này có thể được thực hiện bằng cách sử dụng

plt.show()

chức năng từ matplotlib.

Ban đầu tôi đã đăng giải pháp sử dụng đối tượng matplotlib đã nhập từ seaborn ( sns.plt.show()) tuy nhiên đây được coi là một thực tiễn xấu. Do đó, chỉ cần nhập trực tiếp mô-đun matplotlib.pyplot và hiển thị các lô của bạn với

import matplotlib.pyplot as plt
plt.show()

Nếu sổ ghi chép IPython được sử dụng, phụ trợ nội tuyến có thể được gọi để loại bỏ sự cần thiết của chương trình gọi sau mỗi âm mưu. Phép thuật tương ứng là

%matplotlib inline

4
Tôi vẫn không nhận được một âm mưu sns được hiển thị tương tác. sns.plt.show () không hoạt động. Nhưng khi tôi thay đổi nó thành nội tuyến, tôi nhận được cốt truyện (nhưng không tương tác). Bất cứ ý tưởng tại sao?
người dùng 3317704 11/03/2015

bạn có thể thử để xác định một backend sử dụng một cái gì đó giống như %matplotlib qt, %matplotlib gtk, %matplotlib tk, vv nhìn thấy %matplotlib?để biết thêm thông tin
Jakob

17
Thật là khó chịu khi trong các ví dụ ở trang seaborn không có lệnh sns.plt.show (). Làm thế nào họ có thể quên một cái gì đó tiểu học này?
Michael Hecht

@MichaelHecht Việc thiếu plt.show () bằng cách nào đó đã được khắc phục trong vấn đề này , bạn có thể giải quyết các khiếu nại của mình ở đó. Có lẽ họ sẽ thêm nó vào tài liệu.
Jakob

@Jakob có cách nào trong Jupyter (thông qua Anaconda) để thêm phép thuật này %matplotlib inlinevào somesort của tệp cấu hình để nó luôn được áp dụng không? Hay tôi luôn cần thêm nó vào mỗi sổ làm việc mới?
whytheq

41

Tôi đến câu hỏi này khá thường xuyên và tôi luôn mất một lúc để tìm thấy những gì tôi tìm kiếm:

import seaborn as sns
import matplotlib.pyplot as plt

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

Xin lưu ý: Trong Python 2, bạn cũng có thể sử dụng sns.plt.show(), nhưng không phải trong Python 3.

Ví dụ hoàn chỉnh

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

Tặng

nhập mô tả hình ảnh ở đây


1
AttributeError: module 'seaborn' has no attribute 'plt'
weberc2

@ weberc2 Đã sửa. Vấn đề chỉ xảy ra ở Python 3, không cósns.plt
Martin Thoma

19

Để tránh nhầm lẫn (vì dường như có một số trong các ý kiến). Giả sử bạn đang ở trên Jupyter:

%matplotlib inline> hiển thị các ô bên trong máy tính xách tay

sns.plt.show()> hiển thị các ô BÊN NGOÀI của máy tính xách tay

%matplotlib inlinesẽ ghi đè sns.plt.show() theo nghĩa là lô sẽ được hiển thị TRÊN máy tính xách tay ngay cả khi sns.plt.show()được gọi.

Và vâng, thật dễ dàng để đưa dòng vào cấu hình của bạn:

Tự động chạy% matplotlib nội tuyến trong IPython Notebook

Nhưng có vẻ như một quy ước tốt hơn để giữ nó cùng với nhập khẩu trong mã thực tế.


Đối với máy tính xách tay tia lửa?
Technazi

8

Điều này làm việc cho tôi

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

4

Lời khuyên của tôi là chỉ đưa ra một

plt.figure()và đưa ra một số âm mưu sns. Ví dụ

sns.distplot(data).

Mặc dù trông nó không hiển thị bất kỳ cốt truyện nào, Khi bạn tối đa hóa con số, bạn sẽ có thể thấy cốt truyện.


Tôi đã quên tạo một hình ( plt.figure()) trước khi thực hiện lineplot của mình và không hiểu tại sao cốt truyện không xuất hiện. Cảm ơn vô cùng!
Sander Vanden Hautte

2

Nếu bạn vẽ trong bảng điều khiển IPython (nơi bạn không thể sử dụng %matplotlib inline) thay vì sổ ghi chép Jupyter và không muốn chạy plt.show()liên tục, bạn có thể khởi động bảng điều khiển IPython bằng 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

Để nói về phong cách của đoạn mã của bạn, tôi cho rằng bạn đang sử dụng IPython chứ không phải Jupyter Notebook.

Trong vấn đề này trên GitHub, một thành viên của IPython đã nói rõ rằng việc hiển thị các biểu đồ sẽ chỉ hoạt động khi "chỉ hoạt động khi đó là nhân Jupyter". Vì vậy, %matplotlib inlinesẽ không làm việc.

Tôi chỉ gặp vấn đề tương tự và đề nghị bạn sử dụng Jupyter Notebook để trực quan hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.