2014-06-19 24 views
5

Sto facendo scatterplots su un DF usando matplotlib. Al fine di ottenere colori diversi per ogni set di dati, sto facendo due chiamate separate per plt.scatter:C'è un modo per rendere il marker di scatter plot matplotlib o il colore in base a una variabile discreta in una colonna diversa?

plt.scatter(zzz['HFmV'], zzz['LFmV'], label = dut_groups[0], color = 'r') 
plt.scatter(qqq['HFmV'], qqq['LFmV'], label = dut_groups[1], color = 'b') 
plt.legend() 
plt.show() 

Questo mi dà la dipendenza colore desiderato, ma in realtà quello che sarebbe l'ideale è che se solo potessi ottenere i panda di darmi la dispersione con diverse serie di dati sullo stesso terreno da qualcosa come

df.plot (tipo = dispersione (x, y, color = df.Group, marcatore = df.Head)

pare che ci sia nessun animale simile (almeno quello che potrei trovare). Quindi, la cosa migliore nella mia mente sarebbe quella di mettere le chiamate plt.scatter in un ciclo in cui potrei rendere il colore o l'indicatore variare secondo una delle righe (non x o y, ma qualche altra riga. Se la riga che voglio usare fosse una variabile continua sembra che potrei usare una mappa di colori, ma nel mio caso la riga che devo citare in giudizio è una stringa (tipo categoriale di variabile, non un numero).

Qualsiasi aiuto molto apprezzato.

risposta

10

Quello che stai facendo funzionerà quasi, ma devi passare color un vettore di colori, non solo un vettore di variabili. Così si potrebbe fare:

color = df.Group.map({dut_groups[0]: "r", dut_groups[1]: "b"}) 
plt.scatter(x, y, color=color) 

stesso vale per lo stile marcatore

Si potrebbe anche usare seaborn per fare il colore-mappatura nel modo previsto (come discusso here), anche se non fa marcatore mappatura stile:

import seaborn as sns 
import pandas as pd 
from numpy.random import randn 

data = pd.DataFrame(dict(x=randn(40), y=randn(40), g=["a", "b"] * 20)) 
sns.lmplot("x", "y", hue="g", data=data, fit_reg=False) 

enter image description here

Problemi correlati