ggplot框图中缺少值的一致框宽度

时间:2013-11-04 22:28:37

标签: r plot ggplot2 na

在ggplot2中,我希望盒子图中的方框宽度相等,即使给定的水平组合不存在。

例如,在mtcars中,cyl = 8且gear = 4不存在,这导致该图中的条形更大:

qplot(data=mtcars, x=as.factor(cyl), y=mpg,
      colour=as.factor(gear), geom="boxplot")

enter image description here

对于条形图,使用这些级别组合的NA值填充数据框可以解决问题,但不能用于框图:

mtcars.fill <- data.frame(cyl=8,gear=4,mpg=NA)
mtcars <- rbind.fill(mtcars,mtcars.fill)

qplot(data=mtcars, x=as.factor(cyl), y=mpg, colour=as.factor(gear), geom="boxplot")

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

这导致完全相同的情节。

stat_boxplot有na值的参数,但默认设置为不删除NA:

na.rm = FALSE

1 个答案:

答案 0 :(得分:1)

我能提供的最佳功能是使用facet_grid()进行解决。这有补充 从geom_point()图层中得出的点将与箱图对齐。

library(ggplot2)

plot1 = ggplot(mtcars, aes(x=factor(gear), y=mpg, colour=factor(gear))) +
        geom_boxplot(space=0) + 
        facet_grid(. ~ cyl, labeller="label_both")

plot2 = plot1 + geom_point()

library(gridExtra)
ggsave(filename="plots.png", plot=arrangeGrob(plot1, plot2, ncol=2), 
       width=10, height=4, dpi=120)

enter image description here