2016-08-27 5 views
0

У меня есть следующий код R, который я использую для построения набора временных рядов, которые нормализованы [0,1]. Я хочу, чтобы каждая из линий имела интенсивность цвета, так что все значения <= 0.5 имеют оттенки синего и > 0.5 имеют оттенки оранжевого/желтого. Это то, что я имею прямо сейчас:Динамическая окраска в R

data <- SOME_DATA 

for(i in 1:length(data)){ 
    y <- data[[paste("I",i,sep = "")]] 
    x <- 1:length(y) 
    lo <- loess(y~x) 
    ylim <- range(seq(-1,1,by=0.5)) 
    if(i==1){ 
    plot(x,y,ylim = ylim,main = "Some title",col = ifelse(y[1] < 0,'red','green'),ylab = "intensity",xlab = "time steps") 
    } 
    lines(predict(lo),lwd=2,ylim = ylim,col = ifelse(y[1] < 0,rgb(1,0,0,0.2),rgb(0,1,0,0.2))) 
} 

Как я могу достичь того, что я описал выше?

Благодаря

+0

Вы просто используете функциональные возможности базы г. В этом примере не нужно «plotly». Я дал вам ответ ниже. Надеюсь, это поможет. В другом случае вы должны предоставить более конкретный пример. Data, чтобы мы могли запускать ваш код. –

+0

Отредактировано - извините, похоже, я использовал его для другого кода ниже в скрипте. – user3259045

ответ

1

Используя this решение, которое вы можете сделать следующее:

data <- data.frame(x= runif(100), y = runif(100)) 
color.gradient <- function(x, colors=c("blue","white","red"), colsteps=100) { 
    return(colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ]) 
} 
plot(data$x, data$y, col= color.gradient(data$x)) 

R plot preview

0

Чуть более настраиваемым изображение может быть возможно с ggplot. Использование данных и color.gradient из @jakobr:

ggplot(data, aes(x, y))+ geom_point(col=color.gradient(data$x))+ theme_bw() 

enter image description here

+0

Это не очень хорошая практика. Если вы используете ggplot2, вам обязательно нужно использовать 'ggplot (data, aes (x = x, y = y, color = x)) + geom_point() + scale_colour_gradient2 (low =" blue ", mid =" white " , high = "red") '! –

Смежные вопросы