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

5
假设我的数据有两列,一列是“条件”,另一列是“星级”。
food <- data.frame(Condition = c("A", "B", "A", "B", "A"), Stars=c('good','meh','meh','meh','good'))

如何制作按“条件”分组的“星级”频率条形图?

我在这里阅读了相关内容,但希望扩展该答案以包括分组。

目前我有:

q <- ggplot(food, aes(x=Stars))
q + geom_bar(aes(y=..count../sum(..count..)))

在此输入图像描述

如何制作一个由“条件”分组的四个条形图?

例如,“条件A”将具有0.66的“好”和0.33的“一般”。

2个回答

7
我想这就是你要找的内容:

我猜这就是你要找的:

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参数。然后,我在ggplot()中使用了fill=Condition参数,根据条件将柱形图进行了分组。此外,我设置了position="dodge",以使条形图彼此靠近,还设置了stat="identity",因为频率已经被计算出来。


谢谢,我没有提到,但我更喜欢“条件”组中的“星号”并排放置。不过这仍然是一个好的解决方案。 - kevin0228ca

3
我使用了值 ..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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接