Kombinieren Sie Legenden für Farbe und Form zu einer einzigen Legende

74

Ich erstelle ein Diagramm in ggplot aus einem 2 x 2-Studiendesign und möchte 2 Farben und 2 Symbole verwenden, um meine 4 verschiedenen Behandlungskombinationen zu klassifizieren. Derzeit habe ich 2 Legenden, eine für die Farben und eine für die beiden Formen. Wie kann ich sie zu einer einzigen Legende kombinieren, sodass ich einen blauen Kreis, einen roten Kreis, ein blaues Dreieck und ein gelesenes Dreieck habe?

Daten:

state1 <- c(rep(c(rep("N", 7), rep("Y", 7)), 2))
year <- rep(c(2003:2009), 4)
group1 <- c(rep("C", 14), rep("E", 14))
group2 <- paste(state1, group1, sep = "")
beta <- c(0.16,0.15,0.08,0.08,0.18,0.48,0.14,0.19,0.00,0.00,0.04,0.08,0.27,0.03,0.11,0.12,0.09,0.09,0.10,0.19,0.16,0.00,0.11,0.07,0.08,0.09,0.19,0.10)
    lcl <- c(0.13,0.12,0.05,0.05,0.12,0.35,0.06,0.13,0.00,0.00,0.01,0.04,0.20,0.00,0.09,0.09,0.06,0.06,0.07,0.15,0.11,0.00,0.07,0.03,0.05,0.06,0.15,0.06)
    ucl <- c(0.20,0.20,0.13,0.14,0.27,0.61,0.28,0.27,0.00,1.00,0.16,0.16,0.36,0.82,0.14,0.15,0.13,0.13,0.15,0.23,0.21,0.00,0.15,0.14,0.12,0.12,0.23,0.16)
data <- data.frame(state1,year,group1,group2,beta,lcl,ucl)

Handlung:

library(ggplot2)
pd <- position_dodge(.65)
ggplot(data = data, aes(x = year, y = beta, colour = state1, group = group2, shape = group1)) +
  geom_point(position = pd, size = 4) +
  geom_errorbar(aes(ymin = lcl, ymax = ucl),colour = "black", width = 0.5, position = pd) +
  scale_colour_hue(name = "Treatment & State",  #Legend label, use darker colors
                   labels = c("Control", "Exclosure"),
                   l = 40) +
  scale_shape(name = "State", labels = c("Non-F", "Flwr"))

Geben Sie hier die Bildbeschreibung ein

N Brouwer
quelle
Fehler mit Ihrer y=estimateSchätzung ist Beta?
user1317221_G
auch shapesollte nicht group1wahr?
user1317221_G
Also willst du einen blauen Kreis, einen roten Kreis, ein blaues Dreieck und ein rotes Dreieck?
user1317221_G
Entschuldigung für die Probleme mit dem Code. Ich habe es so geändert, dass y = Beta und Shape = Group1. Ich hätte gerne einen roten Kreis, einen blauen Kreis, ein rotes Dreieck, ein blaues Dreieck. Vielen Dank!
N Brouwer
Das Hauptproblem war, dass Sie zwei verschiedene Vektoren verwendeten, um Ihre Gruppen zu beschreiben, was zu zwei Legenden führte. Wenn Sie Ihre verwenden, group2erhält jede Gruppe ihre eigene Form / Farbe. dann wählen Sie die spezifischen aus, die Sie mit Handbuch
user1317221_G

Antworten:

105

Sie müssen identische Werte nameund labelsWerte für Form und Farbskala verwenden.

pd <- position_dodge(.65)
ggplot(data = data,aes(x= year, y = beta, colour = group2, shape = group2)) +    
  geom_point(position = pd, size = 4) +
  geom_errorbar(aes(ymin = lcl, ymax = ucl), colour = "black", width = 0.5, position = pd) +
  scale_colour_manual(name = "Treatment & State",
                      labels = c("Control, Non-F", "Control, Flwr", "Exclosure, Non-F", "Exclosure, Flwr"),
                      values = c("blue", "red", "blue", "red")) +   
  scale_shape_manual(name = "Treatment & State",
                     labels = c("Control, Non-F", "Control, Flwr", "Exclosure, Non-F", "Exclosure, Flwr"),
                     values = c(19, 19, 17, 17))

Geben Sie hier die Bildbeschreibung ein

Sven Hohenstein
quelle
Wunderbar! Vielen Dank für die Einführung in scale_colour_manual und scale_shape_manual
N Brouwer
1
Nur eine kleine Anmerkung, dies funktioniert genauso gut mit den nicht-manuellen Skalen
Max Gordon
1
Ein weiterer Hinweis: Es gibt Probleme bei der Verwendung von scale_fill_manual anstelle von scale_colour_manual für gefüllte Formen. Um dies zu beheben, scheint es notwendig zu sein, die Einstellungen guides(fill = guide_legend(override.aes = list(fill = ...)))wie in dieser Frage zu überschreiben : stackoverflow.com/questions/12488905/…
Entstapeln Sie den
8

Roter Kreis, blauer Kreis, rotes Dreieck, blaues Dreieck, wie Sie gefragt haben:

ggplot(data =data,aes(x= year, y = beta, shape=group2, colour=group2,group = group2)) +
geom_errorbar(aes(ymin = lcl, ymax = ucl),colour = "black", width = 0.5, position = pd) + 
geom_point(position = pd, size = 4) +  
scale_colour_manual(values=c("red","blue","red","blue")) +   
scale_shape_manual(values=c(19,19,17,17)) +
scale_fill_hue(name="Treatment & State",  #Legend label, use darker colors
labels=c("Control", "Exclosure"),l=40)

Geben Sie hier die Bildbeschreibung ein

user1317221_G
quelle