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?
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
ouline_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:
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
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