【问题标题】:How to make frequency barplot in groups?如何分组制作频率条形图?
【发布时间】:2018-01-24 09:50:33
【问题描述】:

假设我的数据是两列,一是“Condition”,一是“Stars”

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

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

我阅读了here,但想扩展该答案以包括组。

现在我有

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

但这是整个数据集的比例。

如何制作一个有四个条的图,按“条件”分组?

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

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

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

    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")
    

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

    【讨论】:

    • 谢谢,我没有提到它,但我更喜欢“条件”组中的“星”并排。但仍然是一个很好的解决方案
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2018-01-06
      • 2021-11-25
      相关资源
      最近更新 更多