首页 > 解决方案 > R ggplot geom_bar 按组计数值的数量

问题描述

我没有分面就尝试了这段代码,它可以工作。

我想在每个条上添加计数并在我的情节中使用方面,它坏了。我设法使它接近我想要的,像这样:

mtcars %>% group_by(gear, am, vs) %>% summarize(hp_sum = sum(hp), hp = hp) %>%
ggplot(aes(gear, hp_sum, fill = factor(am))) + facet_grid(.~vs) + 
  geom_bar(stat = 'identity', position = 'dodge', alpha = 0.5, size = 0.25) +
  geom_text(aes(label=..count.., y = ..count..), stat='count', position = position_dodge(width = 0.95), size=4)

在此处输入图像描述

但我想要每个栏顶部的数字。如果我使用y = hp_sum,我得到错误:

Error: stat_count() can only have an x or y aesthetic.
Run `rlang::last_error()` to see where the error occurred.

我可能以错误的方式格式化数据集。有任何想法吗?谢谢!

标签: rggplot2countfacetgeom-bar

解决方案


我从这篇文章中了解到,geom_text不按组进行计数。

一个解决方案是事先做总结:

mtcars %>% group_by(gear, am, vs) %>% 
  summarize(hp_sum = sum(hp), count = length(hp)) %>% 
  ggplot(aes(gear, hp_sum, fill = factor(am))) + facet_grid(.~vs) +
  geom_bar(stat = 'identity', position = 'dodge', alpha = 0.5, size = 0.25) +
  geom_text(aes(gear, hp_sum, label = count), 
            position = position_dodge(width = 0.95), size=4)

确保在图中以相同的方式对数据进行分组。以下是分组x=gear, facet_grid(.~vs), fill = factor(am)的三个因素。y=hp所以你应该这样分组:group_by(gear, am, vs). 希望这可以帮助任何正在努力解决这个问题的人。

绘图示例


推荐阅读