2017-09-18 3 views
1

Je cherche un moyen, d'avoir deux ou plusieurs segments dans la légende ainsi que la médiane d'un Boxplot. Je suis venu avec l'exemple suivant:Ajout de geom_segment et Median of the Boxplot à la légende

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")) 

Le geom_segment avec y = 0,6 doit être dans la légende avec une ligne noire en pointillés. En ce moment j'ai choisi deux fois le type de ligne, ce qui n'a pas de sens, mais si j'efface le second type de ligne, la couleur de la légende devient rouge ou le type de ligne devient un autre type non requis. Il devrait être noir et pointillé pour l'intrigue ainsi que pour la légende. Pour y = 0,8 cela fonctionne bien, car le type de ligne par défaut est le bon.

En outre, je voudrais avoir une troisième ligne dans la légende. La troisième ligne doit être la ligne médiane, qui est une ligne noire solide et épaisse.

Merci pour toute aide à l'avance.

Répondre

1

Solution en faisant passer les lignes comme séparées data.frame, en définissant la couleur de ligne individuelle par color = Group et en spécifiant ces couleurs avec 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

Merci beaucoup pour votre aide. J'ai légèrement augmenté votre réponse de sorte que j'ai deux types de ligne différents aussi (voir la réponse ci-dessous). Mais je ne sais toujours pas comment ajouter la ligne médiane du Boxplot à la légende. Une façon serait d'ajouter une troisième ligne (geom_segment) exactement au-dessus de la ligne médiane. Est-ce la seule façon de le faire? –

0

Je PoGibas réponse augmentée très utile pour deux et différents types de lignes:

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

Mais il manque toujours la médiane du Boxplot dans la légende. –