Tracer des lignes sur la dispersion avec Seaborn
Mon objectif est de dessiner une ligne horizontale rouge sur y = 0 sur un tracé effectué à l'aide de seaborn: sns.lmplot
séparés par des col=
ou row=
.
import numpy as np, seaborn as sns, pandas as pd
np.random.seed(5)
myData = pd.DataFrame({'x' : np.arange(1, 101), 'y': np.random.normal(0, 4, 100),\
'z' : ['a','b']*50, 'w':np.random.poisson(0.15,100)})
sns.lmplot("x", "y", col="z", row="w", data=myData, fit_reg=False)
plt.plot(np.linspace(-20,120,1000), [0]*1000, 'r-')
Nous pouvons voir que la dernière parcelle de terrain, l'ensemble des parcelles, est marquée par la ligne rouge:
Merci pour votre aide,
EDIT: de reformuler la question pour tenir compte du cas où l'on générer un tableau de parcelles à l'aide de col=
et/ou row=
et nous voulons que la ligne tracée sur chaque parcelle.
OriginalL'auteur Alex-Antoine Fortin | 2016-03-23
Vous devez vous connecter pour publier un commentaire.
Donc ce bout de code fonctionne pour le cas général où nous utilisons
col=
,row=
, ethue=
.Pas pourquoi la couleur de la ligne horizontale sort que la dernière couleur utilisée sur chaque terrain, mais j'ai renoncer à cela pour l'instant 🙂
OriginalL'auteur Alex-Antoine Fortin
Depuis que je suis venu à travers cette recherche d'une réponse, ici, est plus général la réponse que j'ai finalement découvert:
map_dataframe
acceptera aussi une fonction définie par l'utilisateur (et passe le bloc de données à cette fonction) qui est assez puissant parce que vous pouvez tracer quoi que ce soit sur le facetgrid. Dans l'OP cas:Mon problème est un peu plus complexe parce que je voulais une autre ligne horizontale sur chaque facette.
À reproduire mon cas, supposons que le " z " de la variable a deux échantillons (a et b), chacune avec une valeur de 'obs' (que j'ai ajouté à myData ci-dessous). 'hueMe' représente modélisées valeurs pour chaque échantillon.
Quand vous passez le bloc de données à
plot_hline
, vous avez besoin de déplacer le double de valeurs de 'obs' pour chaque 'z' échantillon en raison axhline ne pouvez prendre qu'une seule valeur poury
. (rappelez-vous, dans notre cas, chaque échantillon a 1 valeur observée de "l'obs", mais plusieurs modélisé 'hueMe valeurs). de plus,y
doit être un scalaire (plutôt que d'une série), donc vous avez besoin pour les index dans le bloc de données pour en extraire de la valeur elle-même.résultant de la parcelle
Maintenant seaborn cartes de la sortie de votre fonction sur chaque facette de
FacetGrid
. Remarque, si vous utilisez un autre tracé de la fonction de axhline, vous ne pourriez pas nécessairement besoin d'extraire la valeur de la série.Espère que cela aide quelqu'un!
OriginalL'auteur JRS
Seaborn est vraiment juste une interface pour matplotlib, de sorte que vous pouvez utiliser tous vos standard matplotlib fonctions. L'importation de pyplot et le traçage d'une ligne horizontale rouge après votre seaborn intrigue fonctionne pour moi.
Mon image est ici - http://i.imgur.com/J7Lvt52.png
col=
etrow=
desns
? (veuillez vous reporter à la modifier pour la question d'origine)OriginalL'auteur Tim