R 带有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?

时间:2021-02-25 11:40:45

标签: r ggplot2 plot label geom-text

我正在尝试绘制两个因子变量,并在图中用 % 标记结果。 我已经在之前的主题/问题中尝试了一些推荐的代码,但我无法解决标签中的 % 问题。

这是我的代码:

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 个答案:

答案 0 :(得分:0)

您可以尝试预先过滤掉 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)