如何在没有数据的类别上执行ggplot的position_dodge?

前端之家收集整理的这篇文章主要介绍了如何在没有数据的类别上执行ggplot的position_dodge?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在ggplot上使用position_dodge来获取共享相同类别(cat)的两个不同信号(ind)的框图。当具有一个信号的数据类别而不是另一个信号的类别时,具有数据的信号的框图覆盖了所有的水平间隔,并且不遵循该特定类别的position_dodge指令。有没有办法使ggplot执行躲避规则?如下面的例子所示,信号x没有类别B的数据,所以它丢失了由position_dodge保留的空间。我想避免这种情况。

提前致谢。

data<-data.frame(cat=c('A','A','B','B'),values=c(3,2,1,4,NA,5,6,7,8,9),ind=c('x','x','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',9,0),'x'))

p  <- ggplot() +
      scale_colour_hue(guide='none') +
      geom_Boxplot(aes(x=as.factor(cat),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)

有些人对我想要的效果感到震惊。 faceting不给我我正在寻找的效果。我正在寻找的最终图表如下所示:

如果您注意到,y = 10处的白色主要刻度标记比其他刻度标记厚。这条粗线是geom_line,大小= 1,隐藏不需要的Boxplots。

我希望我们可以更加无缝地组合不同的geom对象。我将这报告为Hadley的github的错误,但Hadl​​ey表示这是position_dodge的设计行为。我想我以非标准的方式使用ggplot2,解决办法是解决这些问题的方法。无论如何,我希望这有助于一些R人推动ggplot的功能进一步。

解决方法

B的x没有值,所以你可以添加“B”,0,“x”,它们基本上表示对于x的x没有“值”分配。中位数和其他百分位数是零。
data<-data.frame(cat=c('A','x'))

此外,您不必在此添加位置参数,因为当您考虑x作为因素时,ggplot – geom_Boxplot将自动闪避到两边。

print(ggplot() +
  scale_colour_hue(guide='none') +
  geom_Boxplot(aes(x=as.factor(cat),na.rm=T))

猜你在找的CSS相关文章