为什么在r ggplot2中添加facet时堆积条形图会发生变化

时间:2015-02-19 14:15:34

标签: r ggplot2 facet

我有多个组中的数据,我想在分面堆叠条形图中显示它们。数据显示对调查问题的回答。当我在数据框架中查看它们时,它们是有意义的,当我绘制它们(没有刻面)时,它们是有意义的。

然而,数据在分面时似乎会发生变化。我之前从未遇到过这个问题。我能够用一些虚拟数据重新创建一个更改(不是完全相同的更改)。

myDF <- data.frame(rep(c('aa','ab','ac'), each = 9),
               rep(c('x','y','z'),times = 9),
               rep(c("yes", "no", "maybe"), each=3, times=3),
               sample(50:200, 27, replace=FALSE))
colnames(myDF) <- c('place','program','response','number')
library(dplyr)
myDF2 <- myDF %>%
    group_by(place,program) %>%
    mutate(pct=(100*number)/sum(number))

myDF中的数据基本上是对问题的回复计数。 myDF2只会在每个地点和计划中创建一定比例的响应者。

library(ggplot2)
my.plot <-ggplot(myDF2, 
             aes(x=place, y=pct)) +
    geom_bar(aes(fill=myDF$response),stat="identity")

my.plot.facet <-ggplot(myDF2, 
                   aes(x=place, y=pct)) +
    geom_bar(aes(fill=myDF$response),stat="identity")+
    facet_wrap(~program)

我希望看到一个情节,显示正确的&#34; pct&#34;对于每个&#34;响应&#34;在每个&#34;程序&#34;和&#34;地点&#34;。但是,my.plot.facet仅显示一个&#34;响应&#34;每个地方。

example of my.plot and my.plot.facet

数据不是那样的。例如,head(myDF2)显示该程序&#39; aa&#39;到位&#39; x&#39;有和没有。

> head(myDF2)
Source: local data frame [6 x 5]
Groups: place, program

  place program response number      pct
1    aa       x      yes     69 18.35106
2    aa       y      yes     95 25.81522
3    aa       z      yes    192 41.64859
4    aa       x       no    129 34.30851
5    aa       y       no    188 51.08696
6    aa       z       no    162 35.14100

1 个答案:

答案 0 :(得分:1)

事实证明,ORDER在这里很重要。 myDF2不再是数据框架了。这是一个dplyr对象。这意味着ggplot2真的很挣扎。

如果数据需要由程序决定,则需要首先在group_by()

中调用“程序”

请注意,这可以通过查看逆图表面来实现。

my.plot.facet2 <-ggplot(myDF2, 
                       aes(x=program, y=pct)) +
   geom_bar(aes(fill=myDF2$response),stat="identity")+
   facet_wrap(~place)

产生:

my.plot.facet2