2017-08-25 27 views
4

我正在嘗試構建一個複雜的圖形,將單個數據點疊加在boxplot上以顯示彙總統計信息以及原始數據的分散性。我有兩個問題,按重要性排列順序:使用ggplot2對齊子集數據點

  1. 如何將抖動點集中在各自箱形圖的中間位置?
  2. 如何從「drv」圖例中去除黑點?

代碼:

library(ggplot2) 
library(dplyr) 

mpg$cyl <- as.factor(mpg$cyl) 

mpg %>% filter(fl=="p" | fl=="r" & cyl!="5") %>% sample_n(100) %>% ggplot(aes(cyl, hwy, fill=drv)) + 
    stat_boxplot(geom = "errorbar", width=0.5, position = position_dodge(1)) + 
    geom_boxplot(position = position_dodge(1), outlier.shape = NA)+ 
    geom_point(aes(fill=drv, shape=fl), color="black", show.legend=TRUE, alpha=0.5, size=3, position = position_jitterdodge(dodge.width = 1)) + 
    scale_shape_manual(values = c(21,23)) 

Example figure

回答

5

它看起來像geom_point當前躲避是基於兩個fillshape。使用group表示您只想躲開drv

您可以使用override.aes中的guide_legend刪除fill圖例中的點。

mpg %>% 
    filter(fl=="p" | fl=="r" & cyl!="5") %>% 
    sample_n(100) %>% 
    ggplot(aes(cyl, hwy, fill=drv)) + 
     stat_boxplot(geom = "errorbar", width=0.5, position = position_dodge(1)) + 
     geom_boxplot(position = position_dodge(1), outlier.shape = NA)+ 
     geom_point(aes(fill = drv, shape = fl, group = drv), color="black", 
       alpha =0.5, size=3, 
       position = position_jitterdodge(jitter.width = .1, dodge.width = 1)) + 
     scale_shape_manual (values = c(21,23)) + 
     guides(fill = guide_legend(override.aes = list(shape = NA))) 

enter image description here