2017-07-05 4 views
3

In R versuche ich, ein benutzerdefiniertes Liniendiagramm zu erstellen, in dem alle Linien auf dem Diagramm angezeigt werden, aber die Legende für Diagramm wird angepasst, um nur zwei Dinge anzuzeigen.Benutzerdefinierte Gruppierung für die Legende in ggplot

Gerade jetzt mein Code:

x = data.frame(runif(20),runif(20)*2,runif(20)*3) 
names(x) = c("Run 1", "Run 2", "Run 3") 
x$Avg = apply(x, 1, mean) 
x$Step = row.names(x) 
df = melt(x, id=c("Step")) 
ggplot(df, aes(x=Step, y=value, group=variable, color=variable)) + 
    geom_line() 

Ergebnis:

enter image description here

Ich möchte das Diagramm zeigen alle 4 Zeilen haben (läuft 1,2,3 und avg), aber Ich möchte für die Legende "Avg" und "Individual Runs" lesen, wobei "Avg" für jede Farbe steht, die ich auswähle, und jeder der "Individual Runs" ist in grau oder in einer neutralen Farbe. Auf diese Weise sehe ich, wenn ich viele Runs habe, visuell die Daten, aber die Legende verschwindet nicht vom Bildschirm. Wie erreiche ich das?

Antwort

6

Wir können die subset Funktion verwenden und geben Farben mit zwei verschiedenen Anrufe geom_line:

ggplot()+ 
    geom_line(data = subset(df, variable != 'Avg'), 
       aes(x = Step, y = value, group = variable, colour = 'Individual Runs'))+ 
    geom_line(data = subset(df, variable == 'Avg'), 
       aes(x = Step, y = value, colour = 'Avg', group = variable))+ 
    scale_colour_manual(values = c('Avg' = 'red', 'Individual Runs' = 'grey')) 

enter image description here

1

Sie könnten eine Gruppenvariable machen color zuzuordnen, die nur zwei Ebenen hat. Dies ist ziemlich einfach mit der fct_other Funktion aus Paket forcats.

Dadurch wird die Gruppe "Avg" beibehalten, aber alle anderen Durchläufe werden in einer einzigen Ebene zusammengefasst, die über other_level festgelegt werden kann.

library(forcats) 
df$variable2 = fct_other(df$variable, keep = "Avg", other_level = "Individual Runs") 

die neue Variable Verwendung für color, die ursprüngliche Variable variable für group halten. Setzen Sie Farben mit scale_color_manual.

ggplot(df, aes(x = Step, y = value, group = variable, color = variable2)) + 
    geom_line() + 
    scale_color_manual(values = c("red", "grey")) 

enter image description here

Verwandte Themen