我开始制作一个可复制的示例,问另一个问题,甚至无法解决。无论如何,我试图将分类数据绘制成多面条形图。因此,我使用CO3(底部代码)创建了自己的数据集。仅绘制x本身似乎很正常:


但是当我尝试刻面时变得时髦。展示一切都是平等的。


这是没有意义的,因为这将表明每个子组都有相等比例的结果,而数据的ftable不能证明这一点:

                   Type Quebec Mississippi
outcome Treatment
none    nonchilled           7           6
        chilled              4           7
some    nonchilled           6           4
        chilled              5           5
lots    nonchilled           5           4
        chilled              6           3
tons    nonchilled           3           7
        chilled              6           6


我究竟做错了什么?

library(ggplot2)
set.seed(10)
CO3 <- data.frame(CO2[, 2:3], outcome=factor(sample(c('none', 'some', 'lots', 'tons'),
           nrow(CO2), rep=T), levels=c('none', 'some', 'lots', 'tons')))
CO3
x <- ggplot(CO3, aes(x=outcome)) + geom_bar(aes(x=outcome))
x
x  + facet_grid(Treatment~., margins=TRUE)

with(CO3, ftable(outcome, Treatment, Type))


编辑:布赖恩描述的这个问题是一个很容易找到需要堆栈数据的地方。为了解决这个问题,直到下一个版本的ggplot(我假设Hadley意识到了这个问题),我创建了一个愚蠢的便利函数,可以快速将ID列添加到数据帧:

IDer <- function(dataframe, id.name="id"){
    DF <- data.frame(c=1:nrow(dataframe), dataframe)
    colnames(DF)[1] <- id.name
    return(DF)
}

IDer(mtcars)

最佳答案

ggplot2的0.9.0发行版中有一个关于facet_grid()和重复行的错误。见https://github.com/hadley/ggplot2/issues/443

一种解决方法是添加一个虚拟列以中断重复。

CO3$dummy <- 1:nrow(CO3)

ggplot(CO3, aes(x=outcome)) +
  geom_bar(aes(x=outcome)) +
  facet_grid(Treatment~., margins=TRUE)

09-08 07:37