R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?
Posted
技术标签:
【中文标题】R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?【英文标题】:R Stacked percentage bar plot with two factor variables - How to label the % inside the plot, without counting the NA? 【发布时间】:2021-05-27 18:27:35 【问题描述】:我正在尝试绘制两个因子变量并在图中用 % 标记结果。 我已经在之前的主题/问题中尝试了一些推荐的代码,但我无法解决标签中的 % 问题。
这是我的代码:
library(dplyr)
library(ggplot2)
data2 <- data %>% group_by(anoletivo_cat) %>%
count(anoletivo_cat, qsd_distrito_nascimento_rec) %>%
mutate(pct = n / sum(n), pct_label = scales::percent(pct))
ggplot(data2[!is.na(data2$qsd_distrito_nascimento_rec),], aes(x= anoletivo_cat, fill = qsd_distrito_nascimento_rec, y = pct)) +
geom_bar(position = "fill", stat="identity") +
geom_text(aes(label = paste(pct_label), y = pct),
position = position_fill(vjust = 0.5)) +
scale_y_continuous(labels = scales::percent)
这是我得到的情节:
see the plot here
如您所见,我的标签正在计算 NA 数据的百分比(这就是为什么如果我们将条形的百分比相加,它不是 100%,因为它应该是)。所以,我的问题是如何在不计算 NA 的情况下标记图中的 %?
我已经从情节中省略了它们,情节的条形百分比与我在标签中得到的百分比不同......
谢谢!
【问题讨论】:
【参考方案1】:您可以尝试预先过滤掉 NA,例如:
library(dplyr)
library(ggplot2)
data2 <- data %>%
filter(!is.na(qsd_distrito_nascimento_rec)) %>%
group_by(anoletivo_cat) %>%
count(anoletivo_cat, qsd_distrito_nascimento_rec) %>%
mutate(pct = n / sum(n), pct_label = scales::percent(pct))
ggplot(data2, aes(x= anoletivo_cat, fill = qsd_distrito_nascimento_rec, y = pct)) +
geom_bar(position = "fill", stat="identity") +
geom_text(aes(label = paste(pct_label), y = pct),
position = position_fill(vjust = 0.5)) +
scale_y_continuous(labels = scales::percent)
【讨论】:
欢迎来到***。请提供一组数据,以便有可能检查代码。见这里:***.com/help/minimal-reproducible-example> 谢谢丹·韦克林!它解决了问题:)以上是关于R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?的主要内容,如果未能解决你的问题,请参考以下文章
带有 facet_grid 的 ggplot2 中具有多个分类变量的堆积条形图
如何从ggplot2中的两个不同的二进制值列绘制百分比堆积条形图?