我正在尝试在 ggplot 上使用 position_dodge 来获取共享相同类别(cat)的两个不同信号(ind)的箱线图。当有一个类别包含一个信号的数据但另一个信号没有数据时,包含数据的信号的箱线图覆盖所有水平间距,并且不遵守该特定类别的 position_dodge 指令。有没有办法让 ggplot 强制执行躲闪规则?正如您在下面的示例中看到的,信号 x 没有 B 类数据,因此它失去了 position_dodge 保留的空间。我想避免这种情况。
提前致谢。
data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))
print(ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(
aes(x=as.factor(cat), y=values,
fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T))
进度更新
经过一些解决方法后,我想出了我正在寻找的结果......(有点)
data <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))
p <- ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col='white')
print(p)
有些人建议使用刻面来获得我想要的效果。刻面并没有给我想要的效果。我正在寻找的最终图表如下所示:
如果您注意到,y = 10 处的白色主刻度线比其他刻度线厚。这条较粗的线是 size=1 的 geom_line,它隐藏了不需要的箱线图。
我希望我们可以更无缝地组合不同的几何对象。我在 Hadley 的 github 上将此报告为一个错误,但 Hadley 说这是 position_dodge 的设计行为。我想我正在以非标准方式使用 ggplot2,解决方法是解决这类问题的方法。无论如何,我希望这有助于一些 R 人进一步推动 ggplot 强大的功能。