2017-04-23 5 views
1

Gibt es eine Möglichkeit, eine geglättete Kurve (x = var1, y = var2) zu zeichnen und sie in Bezug auf eine dritte kontinuierliche Variable (z = var3) einzufärben? Ich verwende folgenden Code:R ggplot2 - geom_smooth mit Farbverlauf von einer dritten kontinuierlichen Variablen

library(ggplot2) 

    x = runif(100,-20,20) 
    y = 2*x+x^2+rnorm(100,0,50) 
    z = 0.5*x+rnorm(100,0,2) 
    df = data.frame(x=x,y=y,z=z) 

    ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=z),se=F) 

Die geglättete Linie ist jedoch immer noch blau.

Verwendung der internen Variablen „..Y ..“ statt var3 Farben der Linie in Bezug auf var2.

ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=..y..),se=F) 

Gibt es eine andere interne Variable, die aufgerufen wird, um die Zeile in Bezug auf var3 einzufärben?

Ich bin in der Lage, die gewünschte Handlung mit geom_line zu erzeugen, aber ich mag es stattdessen geglättet haben.

+0

Bitte [machen Ihr Beispiel reproduzierbar] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#5963610) durch einige Daten hinzufügen . – alistaire

+0

Sie können die einzelnen Datenpunkte in verschiedenen Farben aufgetragen, aber wie würden 'geom_smooth' wissen, wie ein Teil der Kurve Farbe, die? – Uwe

+0

Sie haben sehr wenig inforamtion zur Verfügung gestellt, aber versuchen Sie dies: 'aes (color = Faktor (var3))'. Wenn dies die korrekte Bedeutung Ihres Datensatzes hat, können wir nicht sagen. – knb

Antwort

0

Sie auf dem richtigen Weg ist mit geom_line, Sie müssen es nur auf bereits geglätteten Daten verwenden. Nehmen Sie Ihre Datenrahmen, wie oben, dann:

df$predict <- predict(loess(y~x, data = df)) 

ggplot(df, aes(x = x,y = predict)) + 
    geom_line(aes(colour = z)) 

Diese hässliche Ergebnisse erzeugen können, wenn Ihre x große Lücken aufweist; sie werden als flache Segmente zwischen den Punkten herauskommen. Es gibt Abhilfen für den von newdata= zu predict() Fütterung und es in einem zweiten Datenrahmen zu speichern, aber dann müssen Sie auch z für diese neuen x Werte neu zu berechnen.

enter image description here

Verwandte Themen