2015-07-22 18 views
8

Come descritto nello seaborn API, il seguente codice produrrà un grafico di regressione lineare.Come modificare il colore della linea nel piano di regressione lineare seaborn

import numpy as np, pandas as pd; np.random.seed(0) 
import seaborn as sns; sns.set(style="white", color_codes=True) 
tips = sns.load_dataset("tips") 
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg') 
sns.plt.show() 

Tuttavia, con un sacco di punti dati della retta di regressione non è più realmente visibile. Come posso cambiare il suo colore? Non sono riuscito a trovare un comando integrato in mare.

Nel caso in cui la linea sia sullo sfondo (cioè dietro i punti), vorrei anche chiedere come portarlo in primo piano.

+0

Se Seaborn restituito gli artisti questo sarebbe molto facile. Il meglio che puoi fare, se non c'è una manopola nella funzione API, è guardare 'g.lines' per cercare di indovinare quale artista nella linea di regressione e poi fare' ln.set_color ('k') ' – tacaswell

+0

@tcaswell Grazie per il suggerimento! Sfortunatamente l'oggetto AttributeError: 'JointGrid' non ha attributi 'lines'' – n1000

risposta

15

Ci sono un paio di approcci, come mwaskom ha sottolineato con tatto. È possibile passare argomenti al grafico congiunto, ma l'impostazione color ci colpisce l'intero grafico a dispersione:

import numpy as np, pandas as pd; np.random.seed(0) 
import seaborn as sns#; sns.set(style="white", color_codes=True) 
tips = sns.load_dataset("tips") 
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg', 
        joint_kws={'color':'green'}) # Scatter and regression all green 

enter image description here

O passare una dizionario di parole chiave di line-tramando attraverso quel dizionario delle parole chiave a dispersione. Ho letto seaborn/linearmodels.py per capire dove farlo, che era di per sé divertente e informativo. Dict in dict:

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg', 
        joint_kws={'line_kws':{'color':'cyan'}}) # Only regression cyan 

enter image description here

Oppure è possibile accedere alla linea dopo che è stato tracciato e modificarlo direttamente. Questo dipende dal fatto che la linea di regressione sia la prima linea tracciata, quindi potrebbe rompersi con gli aggiornamenti di Seaborn. È anche esteticamente/pedagogicamente diverso, in quanto non ricolorare la diffusione dell'incertezza. È un buon modo per familiarizzare con ciò che è l'oggetto JointGrid e in quale altro modo è possibile interagire con esso. (E forse ci sono le proprietà, non è possibile impostare con gli argomenti della funzione di chiamata, anche se non posso pensare di qualsiasi.)

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg') 
regline = g.ax_joint.get_lines()[0] 
regline.set_color('red') 
regline.set_zorder('5') 

enter image description here

+0

great - thanks! – n1000

+1

Questo funziona, ma sarebbe meglio passare semplicemente il colore nella trama usando l'opzione 'joint_kws'. – mwaskom

+0

Penso che questo sia tutto il modo, @mwaskom. Qualcos'altro da documentare? :) – cphlewis

Problemi correlati