2017-08-25 66 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