2017-05-04 6 views
4

Angenommen, ich habe dieses Grundstück:in ggplot

library(ggplot2) 
pl_data <- data.frame(x = rep(c(1, 2), times = 3), y = c(0, 1, 1, 0, .7, .7), col = rep(c("r", "b", "g"), each = 2)) 
ggplot(pl_data, aes(x = x, y = y, color = col)) + 
    geom_line(size = 3) 

Output picture

Wie kann ich das Plotten Reihenfolge zu ändern, so dass die rote Linie über die beiden anderen aufgetragen ?

Der Hintergrund ist daher, dass ich Plots mit sehr ähnlichen Zeilen habe und bestimmte Zeilen im Vordergrund sehen möchte.

Ich nehme etwas entlang der Linien von dieser Antwort order of stacked bars in ggplot funktionieren würde. Es macht die Farbspalte zu Faktoren und ändert ihre Reihenfolge, aber ich würde es vorziehen, dies direkt in einer Zeile des ggplot-Aufrufs zu ändern.

Ich habe auch versucht, die Legendenreihenfolge mit scale_color_discrete(breaks=c("r", "g", "b"))), zu ändern, aber das wirkt sich auch nicht auf die Auftragreihenfolge aus.

Antwort

5

Also eigentlich die letzte Stufe der col ist auf der Oberseite. Sie müssen also die Reihenfolge des Faktors ändern und die Farben umgekehrt als rot automatisch auf der ersten Ebene abgebildet wird (verwendet Standardfarben, das Problem zu veranschaulichen):

pl_data$col <- factor(pl_data$col, c("r", "g", "b")) 
ggplot(pl_data, aes(x = x, y = y, color = col)) + 
    geom_line(size = 3) + 
    scale_color_manual(values = c(r = "blue", g = "green", b = "red")) 

## with standard colors of ggplot2, function taken from: 
## http://stackoverflow.com/questions/8197559/emulate-ggplot2-default-color-palette 

ggplotColours <- function(n = 6, h = c(0, 360) + 15) { 
    if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n 
    hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65) 
} 
pal <- setNames(ggplotColours(3), c("b", "g", "r")) 
ggplot(pl_data, aes(x = x, y = y, color = col)) + 
    geom_line(size = 3) + 
    scale_color_manual(values = pal, breaks = c("b", "g", "r")) 

enter image description here

+0

Sie haben mir ein etwas verwirrt wegen der verschiedenen Farben in unseren Beispielen, aber funktioniert jetzt gut! Ich denke, ich muss Faktoren in meine ggplot-Routine einbauen. – Simon

+1

Ah, sorry, nur rot 'r'' g' und 'b' und angenommen, dass dies passt zu den Farben. Will meine Antwort entsprechend bearbeiten. – thothal

+0

Danke nochmal, funktioniert jetzt auch in meinem Anwendungsbeispiel. Um zu klären, was ich vorher durch meine erste Verwirrung bedeutete: Obwohl die Methode funktioniert, sieht es aus, als ob Sie haben würden verändert nur die Farben zwischen den roten und der blauen Linie, wie die gleiche Zeile oben ist in unseren beiden Parzellen. (Ich sollte einfach nicht meine Zeilen die Namen haben r gegeben, b, g, die mit ihren automatischen Farben stimmen nicht überein.) – Simon

1
library(ggplot2) 
df <- data.frame(
    x = rep(c(1, 2), times = 3), 
    y = c(0, 1, 1, 0, .7, .7), 
    col = rep(c("r", "b", "g"), each = 2)) 

ggplot() + 
    geom_line(data = df[3:4,], aes(x = x, y = y), color = 'blue', size = 3) + 
    geom_line(data = df[5:6,], aes(x = x, y = y), color = 'green', size = 3) + 
    geom_line(data = df[1:2,], aes(x = x, y = y), color = 'red', size = 3) 
+0

Ist meiner Meinung nach gut als Backup, die ich manchmal benutze auch .. Aber es funktioniert einfach nicht in der automatischen ggplot Art und Weise arbeitet, vor allem, wenn Ihr Datenrahmen im Langformat ist. – Simon