2017-09-18 62 views
1

我正在尋找一種方法,在圖例中具有兩個或更多個段以及Boxplot的中值。 我已經提出了下面的示例:將geom_segment和Boxplot的中值添加到圖例

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

的geom_segment其中y = 0.6,應當與一個黑色虛線的圖例。此刻,我選擇了線型兩次,這是沒有道理的,但如果我刪除第二個線型,圖例中的顏色將變爲紅色,或者線型變爲另一個不需要的線型。對於劇情以及傳說來說,它應該是黑色的,並且是虛幻的。對於y = 0.8,效果很好,因爲默認的線型是正確的。

另外,我想在圖例中有第三行。第三行應該是中線,這是一條堅實的粗黑線。

感謝您提前提供任何幫助。

回答

1

解決方法是將線條分別作爲data.frame,將單獨的線條顏色設置爲color = Group,並將這些顏色指定爲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

非常感謝您的幫助。我稍微增加了答案,以便我有兩種不同的線型(請參見下面的答案)。但我仍然不知道如何將Boxplot的中線添加到圖例中。一種方法是在中線之上添加第三行(geom_segment)。這是做到這一點的唯一方法嗎? –

0

我增強PoGibas非常有幫助回答兩個不同的線型,以及:

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

但傳說中仍缺少Boxplot的中位數。 –