为什么在 r ggplot2 中添加构面时堆积条形图会发生变化
Why does stacked bar plot change when add facet in r ggplot2
我有几组数据,我想将它们显示在多面堆叠条形图中。数据显示对调查问题的回答。当我在数据框中查看它们时,它们是有意义的,而当我绘制它们(没有刻面)时,它们也是有意义的。
但是,数据在分面时似乎发生了变化。我以前从未遇到过这个问题。我能够使用一些虚拟数据重新创建更改(不是完全相同的更改)。
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)
我希望看到一个图,显示每个 "program" 和 "place" 中每个 "response" 的正确 "pct"。但是,my.plot.facet
每个地方只显示一个 "response"。
数据不是这样的。例如,head(myDF2)
表明程序 'aa' 在 'x' 中既有 yes 也有 no。
> 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
事实证明,ORDER 在这里很重要。 myDF2 不再是数据框。它是一个 dplyr 对象。这意味着 ggplot2 真的很挣扎。
如果需要程序对数据进行分面,需要先在group_by()
中调用'program'
请注意,通过查看逆向图分面,这里确实如此。
my.plot.facet2 <-ggplot(myDF2,
aes(x=program, y=pct)) +
geom_bar(aes(fill=myDF2$response),stat="identity")+
facet_wrap(~place)
产生:
我有几组数据,我想将它们显示在多面堆叠条形图中。数据显示对调查问题的回答。当我在数据框中查看它们时,它们是有意义的,而当我绘制它们(没有刻面)时,它们也是有意义的。
但是,数据在分面时似乎发生了变化。我以前从未遇到过这个问题。我能够使用一些虚拟数据重新创建更改(不是完全相同的更改)。
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)
我希望看到一个图,显示每个 "program" 和 "place" 中每个 "response" 的正确 "pct"。但是,my.plot.facet
每个地方只显示一个 "response"。
数据不是这样的。例如,head(myDF2)
表明程序 'aa' 在 'x' 中既有 yes 也有 no。
> 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
事实证明,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)
产生: