R:ggplot2:如果按组丢失数据,则框线图的宽度是否一致?

时间:2018-08-31 21:53:09

标签: r ggplot2 boxplot

我之前曾针对 barplots 讨论过类似的问题,但缺少针对 boxplots 的解决方案:Consistent width for geom_bar in the event of missing data

我想按组生成箱形图。但是,某些组的数据可能会丢失,从而导致缺少组的箱形图的宽度增加

我尝试指定geom_boxplot(width = value)或geom_boxplot(varwidth = F),但这不起作用。

此外,正如Barplots示例所建议的那样,我尝试为丢失的数据组添加NA值。 Boxplot仅跳过缺少的数据,并扩展boxplot的宽度。我得到了警告:

Warning messages:
1: Removed 1 rows containing non-finite values (stat_boxplot). 

虚拟示例:

# library
library(ggplot2)

# create a data frame
variety=rep(LETTERS[1:7], each=40)
treatment=rep(c("high","low"),each=20)
note=seq(1:280)+sample(1:150, 280, replace=T)

# put data together
data=data.frame(variety, treatment ,  note)

ggplot(data, aes(x=variety, y=note, fill=treatment)) + 
  geom_boxplot()

如果每个组都有值,则方框图的宽度相同:

boxplots have the same width is there are values for each group

删除1组的值:

# subset the data to have a missing data for group:
data.sub<-subset(data, treatment != "high" | variety != "E" )

windows(4,3)
ggplot(data.sub, aes(x=variety, y=note, fill=treatment)) + 
  geom_boxplot()

缺少数据的箱形图比另一个箱形图宽:

enter image description here


有没有办法保持箱形图的宽度恒定?

1 个答案:

答案 0 :(得分:4)

我们可以在preserve中使用position_dodge参数。

来自?position_dodge

  

保留:躲避应该保留一个位置上所有元素的总宽度还是单个元素的宽度?

ggplot(data.sub, aes(x=variety, y=note, fill=treatment)) + 
 geom_boxplot(position = position_dodge(preserve = "single"))

enter image description here