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中的两个不同的二进制值列绘制百分比堆积条形图?

spss如何删除堆积条形图中的某块数据

为多个变量制作堆积条形图 - R 中的 ggplot2

R Shiny ggplot 条形图和折线图,具有动态变量选择和 y 轴为百分比

R中具有多列整数的堆积条形图