씨본 플롯이 표시되지 않음


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()플롯을 별도의 창으로 렌더링하기 위해 호출 할 수 있습니다.
Jakob

답변:


360

seaborn을 사용하여 작성된 플롯은 일반 matplotlib 플롯과 같이 표시해야합니다. 이것은을 사용하여 수행 할 수 있습니다

plt.show()

matplotlib의 기능.

원래 seaborn ( sns.plt.show()) 에서 이미 가져온 matplotlib 객체를 사용하도록 솔루션을 게시 했지만 이것은 나쁜 습관으로 간주됩니다. 따라서 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 () 명령이 없다는 것이 정말 귀찮습니다. 그들은이 초등 무엇을 어떻게 잊을 수 있습니까?
Michael Hecht

@MichaelHecht plt.show ()의 부족은 어떻게 든 이 문제 에서 해결되었습니다 . 불만 사항을 해결할 수 있습니다. 어쩌면 그들은 문서에 추가 할 것입니다.
Jakob

@Jakob은 Jupyter (아나콘다를 통해)에서 %matplotlib inline항상 적용되도록 구성 파일의 일부 에이 마법 을 추가하는 방법이 있습니까? 아니면 항상 새 통합 문서에 추가해야합니까?
왜 theqq

41

나는이 질문에 상당히 규칙적으로 도달하고 내가 찾은 것을 찾는 데 항상 시간이 걸립니다.

import seaborn as sns
import matplotlib.pyplot as plt

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

참고 : Python 2에서는 Python 3에서는 사용할 수 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
Martin Thoma

19

혼란을 피하기 위해 (의견에 일부가있는 것처럼 보입니다). Jupyter를 사용한다고 가정합니다.

%matplotlib inline> 노트북 내부 에 줄거리를 표시합니다

sns.plt.show()> 노트북 외부 에 플롯을 표시합니다.

%matplotlib inline일거에 sns.plt.show() 플롯 표시한다는 의미에서 IN 심지어 노트북 sns.plt.show()이라고합니다.

그리고 네, 설정에 라인을 포함시키는 것은 쉽습니다.

IPython Notebook에서 % matplotlib 인라인 자동 실행

그러나 실제 코드에서 가져 오기와 함께 유지하는 것이 더 나은 규칙으로 보입니다.


스파크 노트?
technazi

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

Jupyter 노트북 대신 IPython 콘솔 (사용할 수없는 위치) 을 플롯하고 반복적 %matplotlib inline으로 실행하지 않으려는 경우 다음을 사용 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

코드 스 니펫의 스타일을 알기 위해 Jupyter Notebook 대신 IPython을 사용하고 있다고 가정합니다.

GitHub 의이 문제 에서 2016 년 IPython 회원은 "Jupyter 커널 인 경우에만 작동"할 때만 차트 표시가 작동 함을 분명히했습니다. 따라서 %matplotlib inline작동하지 않습니다.

방금 동일한 문제가 발생하여 Jupyter Notebook을 시각화에 사용하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.