2016-12-27 4 views
0

Ich habe mir andere Lösungen angeschaut, kann aber innerhalb von ggplot keine logische Funktion erreichen. Ich habe folgende Funktion. Ein Datenrahmen wird zusammen mit zwei Spalten zur Darstellung als Streudiagramm übergeben.ggplot2 - Übergabe des Datenrahmens mit Spaltennamen

scatter_plot2 <- function(df, xaxis, yaxis){ 
     b <- ggplot(data = df, aes_string(xaxis, yaxis), environment = environment()) 
     gtype <- geom_point(aes(alpha = 0.2, color = yaxis > 0)) 
     sm <- geom_smooth(formula = xaxis ~ yaxis, color="black") 
     b + gtype + sm + theme_bw() 
    } 

die ich verwendet nennen:

scatter_plot2(train_df, "train_df$signal", "train_df$yhat5") 

===

Die color = yaxis > 0

soll Punkte über (Y-Achse) 0 in "grüne" plotten und, die unten in "rot". Obwohl ich in der Lage bin, die Zeichenfolgennamen auf der Achse korrekt anzuzeigen, kann ich das logische Verfahren nicht korrekt ausführen.

Bitte helfen.

Antwort

1

Da Sie Ihre eigene Funktion dafür erstellen, berechnen Sie einfach die benötigte Farbe vor der Zeit. Da Sie einen Datenrahmen und die Variablen übergeben, müssen Sie eine Standardauswertung verwenden (Sie tun dies bereits mit aes_string).

Ich habe den Code ein wenig aufgeräumt, setzen Sie die ggplot Anweisung in eine einzige Kette, so dass einige Anrufe aes explizit, und machen Sie Ihre glatte Formel y~x. Sie möchten auch nicht $ verwenden, wenn Sie die Variablen übergeben, übergeben Sie einfach zitierte Namen.

library(dplyr) 
library(ggplot2) 

scatter_plot2 <- function(df, xaxis, yaxis){ 

    df <- mutate_(df, color = ~ifelse(yaxis > 0, "green", "red")) 

    ggplot(data = df, aes_string(x = xaxis, y = yaxis)) + 
     geom_point(aes(alpha = 0.2, color = color)) + 
     geom_smooth(formula = y ~ x, color =" black") + 
     scale_color_identity() + 
     theme_bw() 
} 

Der Anruf wäre (iris für ein Beispiel verwendet wird):

scatter_plot2(iris, "Sepal.Width", "Sepal.Length") 

in resultierend:

enter image description here

+0

Danke! Danke! Danke!! –

Verwandte Themen