Je suis sûr que j'oublie quelque chose de très simple, mais je ne parviens pas à faire fonctionner certaines parcelles avec Seaborn.
Si je fais:
import seaborn as sns
Ensuite, toutes les parcelles que je crée comme d'habitude avec matplotlib obtiennent le style Seaborn (avec la grille grise à l'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 que les styles Seaborn sont appliqués à d'autres graphiques matplotlib, mais les fonctions Seaborn ne semblent rien faire. Quelqu'un at-il une idée de ce que pourrait être le problème?
Les parcelles créées avec Seaborn doivent être affichées comme des parcelles matplotlib ordinaires . Cela peut être effectué à l'aide de
plt.show()
fonction de matplotlib.
A l'origine, j'avais posté 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, importez simplement le module matplotlib.pyplot et affichez vos parcelles avec
import matplotlib.pyplot as plt
plt.show()
Si le cahier IPython est utilisé, le backend en ligne peut être appelé pour supprimer la nécessité d'appeler show après chaque tracé. La magie respective est
%matplotlib inline
J'arrive régulièrement à cette question et il me faut toujours un temps pour trouver ce que je cherche:
import seaborn as sns
import matplotlib.pyplot as plt
plt.show() # <--- This is what you are looking for
Remarque: en Python 2, vous pouvez également utiliser sns.plt.show()
, mais pas en 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()
Donne
Pour éviter toute confusion (car il semble y en avoir dans les commentaires). En supposant que vous soyez sur Jupyter:
%matplotlib inline
> affiche les tracés &AGRAVE; L'INT&EACUTE;RIEUR du cahier
sns.plt.show()
> affiche les tracés EN DEHORS du cahier
%matplotlib inline
va REMPLACERsns.plt.show()
dans le sens où les tracés seront affichés DANS le bloc-notes même lorsque sns.plt.show()
est appelé.
Et oui, il est facile d'inclure la ligne dans votre configuration:
Exécuter automatiquement% matplotlib inline dans IPython Notebook
Cependant, il semble préférable de conserver les importations dans le code actuel.
Mon conseil est juste de donner un
plt.figure()
et donnez un graphique sns. Par exemple
sns.distplot(data)
.
Bien que cela ressemble, cela ne montre aucune parcelle. Lorsque vous maximisez la figure, vous pourrez voir la parcelle.
Cela a fonctionné pour moi
import matplotlib.pyplot as plt
import seaborn as sns
.
.
.
plt.show(sns)
Si vous tracez dans Console IPython (où vous ne pouvez pas utiliser %matplotlib inline
) à la place du bloc-notes Jupyter et que vous ne voulez pas exécuter plt.show()
à plusieurs reprises, vous pouvez démarrer la console IPython avec 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
Pour distinguer le style de votre extrait de code, je suppose que vous utilisiez IPython plutôt que Jupyter Notebook.
Dans ce numéro sur GitHub, un membre d’IPython en 2016 a expliqué que l’affichage des graphiques ne fonctionnerait que si "ne fonctionnait que s’il s’agissait d’un noyau Jupyter". Ainsi, le %matplotlib inline
ne fonctionnerait pas.
Je viens d'avoir le même problème et suggère que vous utilisez Jupyter Notebook pour la visualisation.