web-dev-qa-db-fra.com

Différentes couleurs pour les points et les lignes dans le registre Seaborn

Tous les exemples énumérés dans la documentation regplot de Seaborn montrent la même couleur pour les points et la droite de régression. Changer l'argument color change les deux. Comment peut-on définir une couleur différente pour les points en tant que ligne?

5
Max Ghenis

Vous avez raison de dire que l'argument color modifie tous les éléments du tracé. Cependant, si vous lisez le dernier bit de la phrase pertinente dans la documentation :

couleur: couleur matplotlib

Couleur à appliquer à tous les éléments de la parcelle; sera remplacé par les couleurs passées en scatter_kws ou line_kws.

Par conséquent, en utilisant scatter_kws ou line_kws, nous pouvons en changer la couleur individuellement. Prenons le premier exemple donné dans la documentation:

import seaborn as sns

tips = sns.load_dataset("tips")
ax = sns.regplot(x="total_bill", y="tip", data=tips,
                 scatter_kws={"color": "black"}, line_kws={"color": "red"})

plt.show()

Donne:

enter image description here

6
DavidG

Vous avez déjà une bonne réponse. La suggestion de DavidG d'utiliser line_kws et scatter_kws a pour effet secondaire que la ligne de régression et les couleurs de l'intervalle de confiance sont les mêmes (bien que le ci soit alpha-ed). Voici un moyen d'avoir des couleurs distinctes. S'il y a un meilleur moyen, j'aimerais savoir!

Créez une FacetGrid née de la mer, puis ajoutez des couches avec la fonction map()

import pandas 
x = [5, 3, 6, 3, 4, 4, 6, 8]
y = [13, 15, 7, 12, 13, 11, 9, 5]
d = pandas.DataFrame({'x':x, 'y': y})
import seaborn
import matplotlib.pyplot as plt 
seaborn.set(style = 'whitegrid')
p = seaborn.FacetGrid(d, size = 4, aspect = 1.5) 
p.map(plt.scatter, 'x', 'y', color = 'red')
p.map(seaborn.regplot, 'x', 'y', scatter = False, ci = 95, 
    fit_reg = True, color = 'blue') 
p.map(seaborn.regplot, 'x', 'y', scatter = False, ci = 0, 
    fit_reg = True, color = 'darkgreen')
p.set(xlim = (2, 9)) 
p.set(ylim = (2, 17)) 
p.savefig('xy-regression-ci.pdf', bbox_inches='tight')

J'ai été inspiré par cette question

enter image description here

Remarque en passant (hors sujet): définissez la taille de la figure dès le début, car les méthodes habituelles ne semblent pas s'appliquer ici.

# set figure size here by combining size and aspect:
seaborn.FacetGrid(d, size=4, aspect=1.5) 

# usual tricks below do not work with FacetGrid?
p.set_size_inches(8,4)
seaborn.set(rc={'figure.figsize':(8,4)})
rcParams['figure.figsize'] = 8,4
0
PatrickT