Je suis sûr que j'oublie quelque chose de très simple, mais je ne peux pas faire fonctionner certaines parcelles avec Seaborn.
Si je fais:
import seaborn as sns
Ensuite, tous les tracés que je crée comme d'habitude avec matplotlib obtiennent le style Seaborn (avec la grille grise en arrière-plan).
Cependant, si j'essaie de faire l'un des exemples, tels que:
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>
La fonction pairplot renvoie un objet PairGrid, mais le tracé ne s'affiche pas.
Je suis un peu confus parce que matplotlib semble fonctionner correctement, et les styles Seaborn sont appliqués à d'autres tracés matplotlib, mais les fonctions Seaborn ne semblent rien faire. Quelqu'un at-il une idée de ce qui pourrait être le problème?
python
matplotlib
seaborn
robc89
la source
la source
%matplotlib inline
pour spécifier le backend en ligne. Sinon, vous pourriez appelersns.plt.show()
pour rendre l'intrigue dans une fenêtre distincte.Réponses:
Les tracés créés à l'aide de seaborn doivent être affichés comme des tracés matplotlib ordinaires. Cela peut être fait en utilisant le
fonction de matplotlib.
À l'origine, j'ai publié la solution pour utiliser l'objet matplotlib déjà importé de seaborn (
sns.plt.show()
), mais cela est considéré comme une mauvaise pratique. Par conséquent, il suffit d'importer directement le module matplotlib.pyplot et d'afficher vos tracés avecSi le bloc-notes IPython est utilisé, le backend en ligne peut être invoqué pour supprimer la nécessité d'appeler show après chaque tracé. La magie respective est
la source
%matplotlib qt
,%matplotlib gtk
,%matplotlib tk
etc. voir%matplotlib?
pour plus d' informations%matplotlib inline
à une sorte de fichier de configuration afin qu'elle soit toujours appliquée? Ou dois-je toujours l'ajouter à chaque nouveau classeur?J'arrive assez régulièrement à cette question et il me faut toujours un certain temps pour trouver ce que je recherche:
Remarque: en Python 2, vous pouvez également utiliser
sns.plt.show()
, mais pas en Python 3.Exemple complet
Donne
la source
AttributeError: module 'seaborn' has no attribute 'plt'
sns.plt
Pour éviter toute confusion (comme il semble y en avoir dans les commentaires). En supposant que vous êtes sur Jupyter:
%matplotlib inline
> affiche les tracés À L' INTÉRIEUR du cahiersns.plt.show()
> affiche les tracés HORS du carnet%matplotlib inline
sera IGNORERsns.plt.show()
au sens que les parcelles seront affichés DANS l'ordinateur portable même quandsns.plt.show()
on appelle.Et oui, il est facile d'inclure la ligne dans votre configuration:
Exécutez automatiquement% matplotlib inline dans IPython Notebook
Mais il semble préférable de le conserver avec les importations dans le code actuel.
la source
Cela a fonctionné pour moi
la source
Mon conseil est juste de donner un
plt.figure()
et donner quelques sns intrigue. Par exemplesns.distplot(data)
.Bien qu'il semblera ne montrer aucun tracé, Lorsque vous maximisez le chiffre, vous pourrez voir le tracé.
la source
plt.figure()
) avant de faire mon tracé et je n'ai pas compris pourquoi le tracé ne s'est pas affiché. Excellent, merci!Si vous tracez dans la console IPython (où vous ne pouvez pas utiliser
%matplotlib inline
) au lieu du bloc-notes Jupyter et que vous ne souhaitez pas exécuterplt.show()
plusieurs fois, vous pouvez démarrer la console IPython avecipython --pylab
:la source
Pour dire à partir du style de votre extrait de code, je suppose que vous utilisiez IPython plutôt que Jupyter Notebook.
Dans ce numéro sur GitHub, il a été précisé par un membre d'IPython en 2016 que l'affichage des graphiques ne fonctionnerait que lorsque "ne fonctionnerait que s'il s'agit d'un noyau Jupyter". Ainsi, le
%matplotlib inline
ne fonctionnerait pas.J'avais juste le même problème et je vous suggère d'utiliser le bloc-notes Jupyter pour la visualisation.
la source