Seaborn-Grundstücke werden nicht angezeigt

Lesezeit: 4 Minuten

Benutzer-Avatar
rtc3po

Ich bin mir sicher, dass ich etwas sehr Einfaches vergessen habe, aber ich kann bestimmte Handlungen nicht dazu bringen, mit Seaborn zu arbeiten.

Wenn ich mache:

import seaborn as sns

Dann erhalten alle Plots, die ich wie gewohnt mit matplotlib erstelle, das Seaborn-Styling (mit dem grauen Gitter im Hintergrund).

Wenn ich jedoch versuche, eines der Beispiele zu tun, wie zum Beispiel:

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>

Die Pairplot-Funktion gibt ein PairGrid-Objekt zurück, aber der Plot wird nicht angezeigt.

Ich bin ein wenig verwirrt, weil Matplotlib richtig zu funktionieren scheint und die Seaborn-Stile auf andere Matplotlib-Plots angewendet werden, aber die Seaborn-Funktionen scheinen nichts zu tun. Hat jemand eine Ahnung, was das Problem sein könnte?

  • Nur eine kurze Vermutung … wenn Sie Ipython verwenden, müssen Sie anrufen %matplotlib inline um das Inline-Backend anzugeben. Sonst könntest du anrufen sns.plt.show() um den Plot in ein separates Fenster zu rendern.

    – Jakob

    27. Oktober 2014 um 21:42 Uhr

Benutzer-Avatar
Jakob

Mit Seaborn erstellte Plots müssen wie gewöhnliche Matplotlib-Plots angezeigt werden. Dies kann mit der erfolgen

plt.show()

Funktion von matplotlib.

Ursprünglich habe ich die Lösung gepostet, um das bereits importierte Matplotlib-Objekt von Seaborn zu verwenden (sns.plt.show()), dies wird jedoch als schlechte Praxis angesehen. Importieren Sie daher einfach direkt die matplotlib.pyplot Modul und zeigen Sie Ihre Plots mit

import matplotlib.pyplot as plt
plt.show()

Wenn das IPython-Notebook verwendet wird, kann das Inline-Backend aufgerufen werden, um die Notwendigkeit des Aufrufs von show nach jedem Plot zu beseitigen. Die jeweilige Magie ist

%matplotlib inline

  • Ich bekomme immer noch keinen SNS-Plot interaktiv angezeigt. sns.plt.show() funktioniert nicht. Aber wenn ich es in Inline ändere, bekomme ich die Handlung (aber nicht interaktiv). Irgendeine Idee warum?

    – Benutzer 3317704

    11. März 2015 um 11:37 Uhr


  • Sie könnten versuchen, ein Backend mit etwas wie anzugeben %matplotlib qt, %matplotlib gtk, %matplotlib tk usw. siehe %matplotlib? für mehr Informationen

    – Jakob

    11. März 2015 um 14:06 Uhr

  • Es ist wirklich ärgerlich, dass es in den Beispielen auf der Seaborn-Seite keinen Befehl sns.plt.show() gibt. Wie können sie etwas so Elementares vergessen?

    – Michael Hecht

    18. April 2015 um 13:06 Uhr

  • @MichaelHecht Das Fehlen von plt.show() wurde irgendwie angegangen dieses Problem, können Sie Ihre Beschwerden dort richten. Vielleicht werden sie es zu den Dokumenten hinzufügen.

    – Jakob

    18. April 2015 um 20:17 Uhr

  • @Jakob gibt es in Jupyter (über Anaconda) eine Möglichkeit, diese Magie hinzuzufügen %matplotlib inline in eine Art Konfigurationsdatei, damit sie immer angewendet wird? Oder muss ich es immer zu jeder neuen Arbeitsmappe hinzufügen?

    – warumtheq

    12. Mai 2016 um 10:25 Uhr

Benutzer-Avatar
Martin Thomas

Ich stelle mir diese Frage ziemlich regelmäßig und es dauert immer eine Weile, bis ich finde, was ich suche:

import seaborn as sns
import matplotlib.pyplot as plt

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

Bitte beachten Sie: In Python 2 können Sie auch verwenden sns.plt.show()aber nicht in Python 3.

Vollständiges Beispiel

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

Gibt

Geben Sie hier die Bildbeschreibung ein

Benutzer-Avatar
mikkokotila

Um Verwirrung zu vermeiden (da es einige in den Kommentaren zu geben scheint). Angenommen, Sie sind auf Jupyter:

%matplotlib inline > zeigt die Diagramme an INNERHALB das Notebook

sns.plt.show() > zeigt die Diagramme an AUSSEN des Notizbuches

%matplotlib inline Wille ÜBERSCHREIBEN sns.plt.show() in dem Sinne, dass Plots gezeigt werden IN das Notebook auch wenn sns.plt.show() wird genannt.

Und ja, es ist einfach, die Zeile in Ihre Konfiguration aufzunehmen:

%matplotlib automatisch inline in IPython Notebook ausführen

Aber es scheint eine bessere Konvention zu sein, es zusammen mit Importen im eigentlichen Code zu halten.

  • Für Spark-Notebooks?

    – Technazi

    24. Oktober 2018 um 17:05 Uhr

Das hat bei mir funktioniert

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

Wenn Sie einplanen IPython-Konsole (wo Sie nicht verwenden können %matplotlib inline) anstelle des Jupyter-Notebooks und möchte nicht ausgeführt werden plt.show() wiederholt, können Sie die IPython-Konsole mit starten 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

Benutzer-Avatar
Benutzer 3317704

Mein Rat ist, nur a zu geben

plt.figure() und geben Sie einige SNS-Plot. Zum Beispiel

sns.distplot(data).

Obwohl es so aussieht, als ob es keinen Plot zeigt, können Sie den Plot sehen, wenn Sie die Figur maximieren.

Benutzer-Avatar
YC Tsim

Um den Stil Ihres Code-Snippets zu erkennen, haben Sie vermutlich IPython und nicht Jupyter Notebook verwendet.

In diesem Ausgabe Auf GitHub wurde 2016 von einem Mitglied von IPython klargestellt, dass die Anzeige von Diagrammen nur funktionieren würde, wenn “nur funktionieren, wenn es sich um einen Jupyter-Kernel handelt”. Und so kam es dass der %matplotlib inline würde nicht funktionieren.

Ich hatte gerade das gleiche Problem und schlage vor, dass Sie Jupyter Notebook für die Visualisierung verwenden.

1071840cookie-checkSeaborn-Grundstücke werden nicht angezeigt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy