2015-12-19 14 views
7

Dieser Code:Seeborn-Käfer? Uneinheitliche in Heatmap Plotten

%matplotlib inline 

#import numpy as np; np.random.seed(0) 
import matplotlib.pyplot as plt 
import seaborn as sns #; sns.set() 

flights = sns.load_dataset("flights") 
flights = flights.pivot("month", "year", "passengers") 

sns.heatmap(flights, annot=True, linewidths=.2, fmt="d") 

#plt.show() 

Wird ein Ergebnis bekommen sieht aus wie the official result (See/verify it here):

enter image description here

jedoch deaktivieren, wenn ich die Inline-Plotten und aktivieren Sie die plt.show() das Ergebnis sieht stattdessen so aus:

Annotated heatmaps?

d.h., die Anmerkung mit Ausnahme einer Zelle weg und y-label Ausrichtung ist falsch, wenn Inline-Plotten deaktiviert ist. Da dies die einzige Änderung ist, die ich gemacht habe, denke ich, dass dies ein Fehler mit seaborn ist, dass es keine konsistenten Ergebnisse erzeugen kann.

Kann dies bitte jemand bestätigen?
Und gibt es bitte eine mögliche Lösung?

Update dank Sergey für sein Feedback, hier sind meine Versionen von allem relevant:

Python: 3.5.0 |Anaconda 2.4.0 (64-bit)| (default, Dec 1 2015, 11:46:22) [MSC v.1900 64 bit (AMD64)] 
IPython: 4.0.0 
Matplotlib: 1.5.0 
Seaborn: 0.6.0 

Also ich denke, es ist entweder Python3 oder Matplotlib: 1.5, die das Problem verursacht. Ich werde das Python3-Tag nur für den Fall hinzufügen.

Dank

Antwort

0

Für mich ist der Code, um das gleiche Ergebnis unabhängig davon, ob ich es plt.show() verwenden %matplotlib inline und machen keine Fehler beobachtet produziert.

Überprüfen Sie Ihre Versionen von allem relevant:

import sys 
print 'Python: ' + sys.version 

import IPython 
print 'IPython: ' + IPython.__version__ 

import matplotlib 
print 'Matplotlib: ' + matplotlib.__version__ 

import seaborn 
print 'Seaborn: ' + seaborn.__version__ 

Meine Versionen Referenz:

Python: 2.7.10 |Anaconda 2.4.0 (64-bit)| (default, Oct 21 2015, 19:35:23) [MSC v.1500 64 bit (AMD64)] 
IPython: 4.0.0 
Matplotlib: 1.4.3 
Seaborn: 0.6.0 
3

Dieser Fehler wurde in der Seaborn GitHub Seite here berichtet tatsächlich wurde. Aus den Kommentaren gibt, wird das Problem, wenn matplotlib das MacOSX verwendet, TkAgg oder QtAgg Backends (auch wenn %matplotlib notebook in einem IPython/Jupyter Notebook).

Im Prinzip das Backend zu einem anderen Wechsel sollte die Handlung wie erwartet machen (wie es in dem ersten Figur gezeigt wird). Von matplotlib's documentation, können Sie überprüfen, welche Backend Sie mit

matplotlib.get_backend() 

und ändern Sie es in einem anderen mit

matplotlib.use() 

verwenden Leider scheint es, dass dieses Problem mit allen verfügbaren interaktiven Backends erscheint. Wenn Sie das brauchen, müssen Sie wahrscheinlich warten, bis der Fehler behoben ist (Sie können alle Fortschritte auf der GitHub-Seite verfolgen).

Wenn Sie glücklich sind, eine PNG/PDF-Datei anstelle ein interaktives Fenster für Ihr Grundstück, wobei das Agg Backend sollte, um Ihren Code korrekt mit einer geringfügigen Änderung arbeiten:

import matplotlib 
matplotlib.use("Agg") 

import matplotlib.pyplot as plt 
import seaborn as sns #; sns.set() 

flights = sns.load_dataset("flights") 
flights = flights.pivot("month", "year", "passengers") 

sns.heatmap(flights, annot=True, linewidths=.2, fmt="d") 

plt.savefig("heatmap.png") 
+0

Dank Pablo. Ich verwende Windows7 und mein interaktives Backend ist 'QtAgg'. Unglücklicherweise, genau wie Kyleabeauchamp berichtet hat, haben "TkAgg und QT4Agg das gleiche Ein-Zellen-Verhalten wie OSX". Auch kein Glück für mich. – xpt

+1

@xpt Ja, Sie haben Recht, dass 'MacOSX' nicht das einzige Backend ist, das diesen Fehler erzeugt. Ich habe es auch für 'QtAgg' und' TkAgg' unter Linux bestätigt. Wenn Sie nur mit PNG/PDF speichern möchten, funktioniert das 'Agg'-Backend für mich. Leider kenne ich kein anderes interaktives Backend, das Sie verwenden könnten. Wir werden wahrscheinlich warten müssen, bis der seaborn/matplotlib Bug behoben ist. Ich werde meine Antwort mit dieser Information aktualisieren. –

+0

Ja, das funktioniert. ** Danke **, weil das '(Agg))' nicht dokumentiert ist und ich trotzdem nicht finden kann. Ich gebe +1 und +1 und übernehme die nächste, wenn der seaborn/matplotlib-Fehler behoben ist und du deine Antwort aktualisierst. – xpt