2011-12-12 16 views
5

Ho un semplice grafico a dispersioneScatterplot i gruppi di colore - base di R trama

x<-rnorm(100) 
y<-rnorm(100) 
z<-rnorm(100) 

voglio tracciare la plot(x,y) ma il colore dei punti devono essere codificati a colori basato su z.

Inoltre, mi piacerebbe avere la possibilità di definire quanti gruppi (e quindi colori) z dovrebbero avere. E che questo gruppo dovrebbe essere resistente ai valori anomali (forse dividere la densità z in gruppi di uguale densità n).

Fino ad ora lo faccio manualmente, c'è un modo per farlo automaticamente?

Nota: Voglio farlo con base R non con ggplot.

risposta

11

È possibile passare un vettore di colori al parametro col, quindi è solo questione di definire i propri gruppi z in un modo che abbia senso per l'applicazione. C'è la funzione cut() in base o cut2() in Hmisc che offre un po 'più di flessibilità. Per aiutare a scegliere tavolozze di colori ragionevoli, il pacchetto RColorBrewer ha un valore inestimabile. Ecco un rapido esempio dopo aver definito x,y,z:

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow")) 
plot(x,y, col = as.character(z.cols), pch = 16) 

enter image description here

È possibile, ovviamente, aggiungere un legend manualmente. Sfortunatamente, non penso che tutti i tipi di grafici accettino i vettori per l'argomento col, ma ovviamente type = "p" funziona. Ad esempio, plot(x,y, type = "l", col = as.character(z.cols)) esce per me come un unico colore. Per questi grafici, è possibile aggiungere diversi colori con lines() o segments() o qualsiasi altro comando di plottaggio di basso livello che è necessario utilizzare. Vedere la risposta di @Andrie per fare ciò con i grafici type = "l" nella grafica di base here.

+0

Il taglio() si divide in intervalli di contenuto uguale? – ECII

+0

@ECII - non di default. 'Hmisc ::: cut2()' fornisce l'argomento 'm' che imposta il numero minimo di osservazioni in ogni gruppo rende semplice questo tuttavia. Qualcosa come "z.cols2 <- cut2 (z, m = length (z)/3)" dovrebbe fare il trucco. – Chase

+0

L'argomento g in cut2 non dovrebbe essere migliore? cut2 (z, g = 3)? – ECII

Problemi correlati