2012-03-30 19 views
34

Planuję poniższy wykres za pomocą funkcji wykresu R. Jest to wykres wektora "shiftTime" przesunięcia w czasie. Mam inną "intensywność" wektora wartości intensywności w zakresie od ~ 3 do ~ 9. Chcę pomalować moje punkty na wykresie na podstawie tych wartości z gradientem kolorów. Przykłady mogę znaleźć kolor na wartości rzeczywistych naniesionych punktów, więc w tym przypadku wartości wektora "shiftTime". Czy możliwe jest również użycie innego wektora, o ile odpowiednie wartości są na tym samym indeksie?Kolor punktów na wykresie różnie w zależności od wektora wartości

My plot

Odpowiedz

89

Oto rozwiązanie wykorzystujące zasady R grafiki:

#Some sample data 
x <- runif(100) 
dat <- data.frame(x = x,y = x^2 + 1) 

#Create a function to generate a continuous color palette 
rbPal <- colorRampPalette(c('red','blue')) 

#This adds a column of color values 
# based on the y values 
dat$Col <- rbPal(10)[as.numeric(cut(dat$y,breaks = 10))] 

plot(dat$x,dat$y,pch = 20,col = dat$Col) 

enter image description here

+4

To jest świetne! Jak mógłbym pokazać legendę? –

16

rozwiązanie wykorzystujące ggplot2:

library(ggplot2) 

#Some sample data 
x <- sort(runif(100)) 
dat <- data.frame(x = x,y = x^2 + 1) 
# Some external vector for the color scale 
col <- sort(rnorm(100)) 

qplot(x, y, data=dat, colour=col) + scale_colour_gradient(low="red", high="blue") 

plot

12

Aby dodać legendę do odpowiedzi Jøran w podstawowej R:

legend("topleft",title="Decile",legend=c(1:10),col =rbPal(10),pch=20) 

Ten przykład dodaje”CEX = 0.8" tylko dla prettiness:

multicoloured plot including legend

+0

Jak ustawić tę legendę jako ciągły pasek przejścia kolorów? – colin

+0

W jaki sposób używasz poprawnych wartości w legendzie argumentu? (nie legenda = c (1:10))? – xhie

Powiązane problemy