如何在群组中制作频率条形图?

时间:2017-08-16 09:53:08

标签: r ggplot2 bar-chart

假设我的数据是两列,一列是“条件”,一列是“星星”

0 / 0

如何将“Star”频率的条形图按“条件”分组?

我读过here但想扩大该答案以包含群组。

现在我有

food <- data.frame(Condition = c("A", "B", "A", "B", "A"), Stars=c('good','meh','meh','meh','good'))

enter image description here 但这是完整数据集的比例。

如何使用“条件”分组四个条形图?

EG。 '条件A'的'Good'为0.66,'Meh'为0.33

2 个答案:

答案 0 :(得分:3)

我想这就是你要找的东西:

food <- data.frame(Condition = c("A", "B", "A", "B", "A"), Stars=c('good','meh','meh','meh','good'))
library(ggplot2)
library(dplyr)
data <- food %>% group_by(Stars,Condition) %>% summarize(n=n()) %>% mutate(freq=n/sum(n)) 

ggplot(data, aes(x=Stars, fill = Condition, group = Condition)) + geom_bar(aes(y=freq), stat="identity", position = "dodge")

enter image description here

首先,我使用dplyr包计算了频率,该包用作geom_bar()中的y参数。然后我在fill=Condition中使用ggplot()参数,根据条件划分条形。此外,由于已经计算过的频率,我已将position="dodge"设置为彼此相邻并且stat="identity"

答案 1 :(得分:2)

我使用了价值..prop..,审美groupfacet_wrap()。使用美学group比例由组计算。 facet_wrap()用于分别绘制每个条件。

require(ggplot2)

food <- data.frame(Condition = c("A", "B", "A", "B", "A"),
                   Stars=c('good','meh','meh','meh','good'))

ggplot(food) +
  geom_bar(aes(x = Stars, y = ..prop.., group = Condition)) +
  facet_wrap(~ Condition)

enter image description here