2015-12-19 34 views
7

Questo codice:Insetto Seaborn? Incoerente in heatmap tramando

%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() 

otterrà un risultato assomiglia the official result (See/verify it here):

enter image description here

Tuttavia, se rendo invalido il tracciato in linea e attivare il plt.show() il risultato sarà simile a questo:

Annotated heatmaps?

I.e., l'annotazione è scomparsa tranne una cella e l'orientamento dell'etichetta y è errato se il disegno in linea è disabilitato. Poiché questo è l'unico cambiamento che ho fatto, penso che questo sia un bug con seaborn, che non possa produrre risultati coerenti.

Qualcuno può confermarlo per favore?
E c'è qualche possibile soluzione per favore?

Update, grazie a Sergey per il suo feedback, qui sono le mie versioni di tutto rilievo:

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 

Quindi penso che è o python3, o Matplotlib: 1.5 che causa il problema. Aggiungerò il tag Python3, per ogni evenienza.

Grazie

risposta

0

Per me il codice produce lo stesso risultato indipendentemente dal fatto che io uso %matplotlib inline e renderlo plt.show(), nessun bug osservato.

Controllare i versioni di tutto rilievo:

import sys 
print 'Python: ' + sys.version 

import IPython 
print 'IPython: ' + IPython.__version__ 

import matplotlib 
print 'Matplotlib: ' + matplotlib.__version__ 

import seaborn 
print 'Seaborn: ' + seaborn.__version__ 

mie versioni per riferimento:

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

Questo bug è stato effettivamente riportati nella pagina di GitHub Seaborn here. Dai commenti lì, il problema appare quando matplotlib sta usando i MacOSX, TkAgg o QtAgg backend (anche quando si utilizza %matplotlib notebook in un notebook IPython/Jupyter).

In linea di principio, la modifica del backend in un altro dovrebbe far funzionare la trama come previsto (come mostrato nella prima figura). Da matplotlib's documentation, è possibile controllare ciò che di back-end che si sta utilizzando con

matplotlib.get_backend() 

e cambiare a un altro con

matplotlib.use() 

Purtroppo, sembra che questo problema appare in tutti i backend interattive disponibili. Se è ciò di cui hai bisogno, probabilmente dovrai aspettare fino a quando il bug non sarà risolto (puoi tenere traccia di qualsiasi avanzamento sulla pagina GitHub).

Se si è soddisfatti produrre un file PNG/PDF, invece di una finestra interattiva per la trama, il backend Agg dovrebbe funzionare correttamente con una leggera modifica al codice:

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

Grazie Pablo. Sto usando Windows7 e il mio back-end interattivo è 'QtAgg'. Sfortunatamente, proprio come ha riferito kyleabeauchamp, "TkAgg e QT4Agg hanno lo stesso comportamento a una cella di OSX." Ad esempio, non ho fortuna neanche per me. – xpt

+1

@xpt Sì, hai ragione che 'MacOSX' non è l'unico backend che produce questo bug. L'ho anche confermato per 'QtAgg' e' TkAgg' su Linux. Se sei soddisfatto del salvataggio in PNG/PDF, il backend 'Agg' funziona per me. Sfortunatamente, non conosco altri backend interattivi che potresti usare, probabilmente dovremo aspettare fino a quando il bug di seaborn/matplotlib non sarà risolto. Aggiornerò la mia risposta con queste informazioni –

+0

Sì, funziona. ** Grazie **, perché that 'use (" Agg ")' non è documentato e non riesco a trovarlo comunque. Io faccio +1 su questo e su +1 e accetto il prossimo quando viene risolto il bug seaborn/matplotlib e aggiorni la risposta. – xpt