2016-12-21 1 views
0

ändern Hier ist mein anfänglicher Datenrahmen.Mit aes_string Farbe von Geom_point aus der dynamischen Spalte

data.df

x y z label 
2 3 4 1 
1 2 3 2 
2 4 3 3 

ggplot zu machen, funktioniert dies, wenn es nur 1-Säule (Label) ist:

g <- ggplot(data.df) + 
     geom_point(data = data.df, aes(x= x, y= y, 
     color = ifelse((label == 2), "a", "b")+ 
     scale_colour_manual(values= c("a" = "blue", "b" = "green")) 

    return g 

auf eine Schaltfläche "merge", neue Spalte mit dem Namen klicken wird dynamisch hinzugefügt:

x y z label label2 
2 3 4 1  1 
1 2 3 2  2 
2 4 3 3  2 

Jetzt in ggplot muss ich ein Zugriff auf die LAST-Spalte anstelle der Label-Spalte (es könnte label2, label3 ... sein) und update ggplot.

Ich habe zwei Möglichkeiten ausprobiert.

g <- ggplot(data.df) + 
     geom_point(data = data.df, aes(x= x, y= y, 
     color = ifelse((data.df[, ncol(data.df)] == 2, "a", "b")+ 
     scale_colour_manual(values= c("a" = "blue", "b" = "green")) 


    return g 

Wie dargestellt, während data.df [, ncol (data.df)], erhalte ich den Fehler mit:

Error: Aesthetics must be either length 1 or the same as the data (40): x, y, colour

ich ein Gefühl aes_string haben kann statt aes verwendet werden:

label <- paste("label", counter , sep="") 

g <- ggplot(data.df) + 
     geom_point(data = data.df, aes_string(x= "x", y= "y", 
     color = ifelse((label == 2), a, b))) + 
     scale_colour_manual(values= c("a" = "blue", "b" = "green")) 

ich erhalte diese Fehler:

Error in ifelse((label == 2), a, b))), : object a not found 
+1

Wie ist das mit Python verwandt? Auch "keine scheint zu funktionieren" ist keine korrekte Beschreibung eines Programmierproblems. – Goyo

+0

Sie können dies tun, indem Sie die Daten vorverarbeiten, um Ihre dynamische Bezeichnung zu erstellen, und dann 'ggplot' verwenden. –

+0

Die Aufnahme von reproduzierbaren Daten würde es wesentlich einfacher machen, Ihnen zu helfen http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

Antwort

0

Meine Meinung ist, dass Sie Ihre Standard-Auswertung machen, die die dynamische Funktionalität erlaubt, bevor Sie in die ggplot2-Funktionen gehen.

Die folgende Tabelle nutzt Standard evaluation versions of dplyr functions. Sie erstellt eine Spalte im Datenrahmen dynamisch namens FormatCol und basiert die Farbskala darauf.

data.df <- data.frame(x = c(2, 1, 2), 
         y = c(3, 2, 4), 
         z = c(4, 3, 3), 
         label = c(1, 2, 3), 
         label2 = c(1, 2, 2)) 

library(ggplot2) 
library(dplyr) 
library(lazyeval) 

formatCol <- names(data.df)[ncol(data.df)] 
formula <- interp(~ifelse((label == 2), "a", "b"), label = as.name(formatCol)) 

plot.df <- data.df %>% mutate_(formatCol = formula) 

    g <- ggplot(plot.df, aes(x= x, y= y)) + 
     geom_point(aes(color = formatCol))+ 
     scale_colour_manual(values= c("a" = "blue", "b" = "green")) 

g 
+0

Ich habe festgestellt, dass mein Fehler beim Testen dieses Codes mit scale_colour_manual aufgetreten ist. Das hat mir geholfen, meinen Code sauberer zu machen. Vielen Dank! –

Verwandte Themen