2016-08-27 2 views
0

Ich habe den folgenden R-Code, den ich verwende, um eine Reihe von Zeitreihen zu plotten, die normalisiert [0,1] sind. Ich möchte, dass jede der Linien eine Farbintensität hat, so dass alle Werte <= 0.5 Blautöne haben und > 0.5 Schattierungen von Orange/Gelb haben. Dies ist, was ich gerade habe:Dynamische Färbung in 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))) 
} 

Wie kann ich erreichen, was ich oben beschrieben?

Dank

+0

Sie sind Basis r Funktionalität nur verwenden. Keine Notwendigkeit für "plotly" in diesem Beispiel. Ich habe dir unten eine Antwort gegeben. Ich hoffe das hilft. Ansonsten müssen Sie genauere Beispieldaten angeben, damit wir Ihren Code ausführen können. –

+0

Bearbeitet - Tut mir leid, es scheint, als ob ich es für einen anderen Code unten im Skript verwendet hätte. – user3259045

Antwort

1

Mit this Lösung Sie Folgendes tun:

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

Etwas mehr konfigurierbar Bild möglich sein kann, mit ggplot. Mit den Daten und color.gradient von @jakobr:

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

enter image description here

+0

Dies ist keine sehr gute Übung. Wenn Sie ggplot2 verwenden, sollten Sie definitiv 'ggplot verwenden (Daten, aes (x = x, y = y, Farbe = x)) + geom_point() + scale_colour_gradient2 (niedrig =" blau ", Mitte =" weiß ") , hoch = "rot") '! –