2017-09-18 5 views
1

Ich suche nach einem Weg, um zwei oder mehr Segmente in der Legende sowie das Median eines Boxplots zu haben. Ich habe mit dem folgenden Beispiel kommen:Geom_Segment und Median des Boxplots zur Legende hinzufügen

y = data.frame(runif(500)) 
library(ggplot2) 
ggplot(data = y)+ 
    aes(0, y)+ 
    geom_boxplot(outlier.shape = 1)+ 
    scale_y_continuous(name = "",limits = c(0,1))+ 
    scale_x_discrete(name = "")+ 
    geom_segment(aes(x=-0.362, y=0.6, xend=0.363,yend=0.6, linetype = "R 
    fans"), linetype = "dashed", colour = "black")+ 
    geom_segment(aes(x=-0.35, y=0.8, xend=0.35,yend=0.8, linetype = 
    "frustated R users"), col = "red")+ 
    theme_bw()+ 
    theme(legend.title = element_blank())+ 
    theme(legend.background = element_rect(fill="white", 
            size=0.1, linetype="solid", 
            colour ="black")) 

Die geom_segment mit y = 0,6 ist mit einer gestrichelte schwarze Linie in der Legende sein. Im Moment habe ich den Linientyp zweimal ausgewählt, was keinen Sinn ergibt, aber wenn ich den zweiten Linientyp lösche, wird die Farbe in der Legende rot oder der Linientyp ändert sich in einen anderen nicht benötigten. Es sollte sowohl für die Handlung als auch für die Legende schwarz und gestrichelt sein. Für y = 0.8 funktioniert es gut, da der Linientyp standardmäßig der richtige ist.

Zusätzlich hätte ich gerne eine dritte Zeile in der Legende. Die dritte Linie soll die Medianlinie sein, die eine feste, dicke, schwarze Linie ist.

Vielen Dank für jede Hilfe im Voraus.

Antwort

1

Lösung durch Passing Linien als separate data.frame, Einstellung der einzelnen Linienfarbe von color = Group und Angabe dieser Farben mit scale_color_manual.

library(ggplot2) 

# Generate data 
dBox <- data.frame(y = rnorm(10)) 
dLines <- data.frame(X =c(-0.362, -0.35), 
        Y = c(0.6, 0.8), 
        Xend = c(0.363, 0.35), 
        Yend=c(0.6, 0.8), 
        Group = c("typeA", "typeB"), 
        color = c("black", "red")) 


ggplot(dBox, aes(0, y)) + 
    geom_boxplot(outlier.shape = 1)+ 
    scale_y_continuous(name = "",limits = c(0,1))+ 
    scale_x_discrete(name = "") + 
    geom_segment(data = dLines, 
       aes(x = X, xend = Xend, 
        y = Y, yend = Yend, 
        color = Group)) + 
    scale_color_manual(values = dLines$color) + 
    theme_bw() + 
    theme(legend.title = element_blank()) + 
    theme(legend.background = element_rect(fill = "white", 
              size = 0.1, 
              linetype = "solid", 
              colour = "black")) 

enter image description here

+0

Ihnen sehr für Ihre Hilfe danken. Ich habe Ihre Antwort leicht erweitert, so dass ich auch zwei verschiedene Linientypen habe (siehe Antwort unten). Aber ich weiß immer noch nicht, wie ich die Medianlinie des Boxplots zur Legende hinzufügen soll. Ein Weg wäre, eine dritte Linie (geom_segment) genau über der Medianlinie hinzuzufügen. Ist das der einzige Weg? –

0

ich Augmented PoGibas sehr hilfreiche Antwort auf zwei verschiedenen Linientypen als auch:

y = data.frame(runif(500)) 


dLines <- data.frame(X =c(-0.362, -0.35), 
       Y = c(0.6, 0.8), 
       Xend = c(0.363, 0.35), 
       Yend=c(0.6, 0.8), 
       Group = c("TypeA", "TypeB"), 
       color = c("black", "red"), 
       linetype = c("solid", "dashed")) 

ggplot(data = y)+ 
    aes(0, y)+ 
    geom_boxplot(outlier.shape = 1)+ 
    scale_y_continuous(name = "",limits = c(0,1))+ 
    scale_x_discrete(name = "")+ 
    geom_segment(data = dLines, 
      aes(x = X, xend = Xend, 
       y = Y, yend = Yend, 
       color = Group, 
       linetype = Group))+ 
    scale_color_manual(values = dLines$color) + 
    scale_linetype_manual(values = dLines$linetype) + 
    theme_bw()+ 
    theme(legend.title = element_blank())+ 
    theme(legend.background = element_rect(fill="white", 
            size=0.1, linetype="solid", 
            colour ="black")) 

enter image description here

+0

Aber immer noch fehlt der Median des Boxplots in der Legende. –

Verwandte Themen