我有一个使用 ggplot2 的条形图,它绘制了不同年龄类别的特定事物的百分比。如何在不更改百分比的情况下删除大量不必要的 NA 值列?我不想从数据中删除 NA 值,因为查看整个人口数据的百分比很重要。
同样的问题已经被问到here但是没有人回答。
这是我使用的代码:
df_final %>%
ggplot() +
geom_bar(aes(x, y = ..prop.., group = 1), stat = "count") +
scale_y_continuous(labels = scales::percent) +
xlab("age.category") +
ylab("Percentage") +
theme_classic()
代码的输出。我需要在不影响百分比的情况下删除巨大的 NA 列。
尝试使用带有 gtable 的东西来删除部分情节,但无济于事。我不想要那样的解决方案,我需要一个简单优雅的解决方案。
一个简单的解决方案是计算计数和道具,包括 ggplot() 之外的
NA
s,然后在绘图之前过滤非NA
s。
使用一些虚假的随机示例数据:
library(ggplot2)
library(dplyr, warn = FALSE)
set.seed(123)
df_final <- data.frame(
x = sample(c(LETTERS[1:5], NA), 100, replace = TRUE)
)
df_final |>
count(x) |>
mutate(prop = prop.table(n)) |>
filter(!is.na(x)) |>
ggplot() +
geom_col(aes(x = x, y = prop)) +
scale_y_continuous(labels = scales::percent) +
xlab("age.category") +
ylab("Percentage") +
theme_classic()