gpt4 book ai didi

r - 将百分比标签添加到 ggplot2 中的条形图

转载 作者:行者123 更新时间:2023-12-04 09:23:39 26 4
gpt4 key购买 nike

我如何使用 geom_textggplot2 中的每个条形顶部添加百分比标签?我知道有几个类似的问题已经得到了回答。但他们要么只使用 1 个分类变量,要么在绘图前计算百分比。
我有以下情节:

ggplot(data = mtcars)+
geom_bar(aes(x = factor(cyl),
y = (..count..)/sum(..count..)*100,
fill = factor(gear)),
position = "dodge")

现在我想在顶部添加百分比标签。如果我使用 y = (..count..)/sum(..count..)*100geom_text ,上面写着 Error in eval(expr, envir, enclos) : object 'count' not found .

最佳答案

在 ggplot 之外,最容易预先计算您需要的数量,因为很难跟踪 ggplot 计算的内容以及这些数量的存储和可用位置。

首先,总结您的数据:

library(dplyr)
library(ggplot2)

mtcars %>%
count(cyl = factor(cyl), gear = factor(gear)) %>%
mutate(pct = prop.table(n))
#> # A tibble: 8 x 4
#> cyl gear n pct
#> <fct> <fct> <int> <dbl>
#> 1 4 3 1 0.0312
#> 2 4 4 8 0.25
#> 3 4 5 2 0.0625
#> 4 6 3 2 0.0625
#> 5 6 4 4 0.125
#> 6 6 5 1 0.0312
#> 7 8 3 12 0.375
#> 8 8 5 2 0.0625

如果您愿意,可以保存它,或者直接通过管道输入 ggplot:

mtcars %>% 
count(cyl = factor(cyl), gear = factor(gear)) %>%
mutate(pct = prop.table(n)) %>%
ggplot(aes(x = cyl, y = pct, fill = gear, label = scales::percent(pct))) +
geom_col(position = 'dodge') +
geom_text(position = position_dodge(width = .9), # move to center of bars
vjust = -0.5, # nudge above top of bar
size = 3) +
scale_y_continuous(labels = scales::percent)



如果您真的想将其全部保留在 ggplot 内部,您可以使用 geom_textstat = 'count' (或 stat_countgeom = "text" ,如果您愿意):

ggplot(data = mtcars, aes(x = factor(cyl), 
y = prop.table(stat(count)),
fill = factor(gear),
label = scales::percent(prop.table(stat(count))))) +
geom_bar(position = "dodge") +
geom_text(stat = 'count',
position = position_dodge(.9),
vjust = -0.5,
size = 3) +
scale_y_continuous(labels = scales::percent) +
labs(x = 'cyl', y = 'pct', fill = 'gear')

它绘制了完全相同的东西。

关于r - 将百分比标签添加到 ggplot2 中的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com