如何在ggplot2饼图中隐藏阈值以下数值且保留对应图例
ggplot2饼图:隐藏低数量类别但保留图例
要实现数量低于250的类别不在饼图中显示,但图例保留所有类别的需求,你可以通过预处理数据将低数量值设为NA的方式实现,具体步骤和修改后的代码如下:
核心思路
- 预处理数据:把
Quantities小于250的数值替换为NA,这样geom_col不会绘制这些类别,但Families的分类信息依然存在,图例会自动保留所有类别。 - 过滤文本标签:避免NA值对应的标签出现在图中,仅显示有效类别的数量标签。
修改后的完整代码
library(ggplot2) library(dplyr) library(ggrepel) # 示例数据 Family_Quantities <- data.frame( Families = c("Pomacentridae", "Gobiidae", "Labridae", "Labrisomidae", "Zanclidae"), Quantities = c(19056, 8000, 7990, 3, 277) ) # 预处理数据:将低于250的数量设为NA Family_Quantities_processed <- Family_Quantities %>% mutate(Quantities = ifelse(Quantities < 250, NA, Quantities)) # 绘制饼图 plot18 <- ggplot(data= Family_Quantities_processed, aes(x = "", y = Quantities, fill = Families)) + geom_col(color = "black") + # 仅显示非NA的数量标签 geom_text_repel(aes(label = Quantities), data = ~filter(.x, !is.na(Quantities)), position = position_stack(vjust = 0.5)) + coord_polar(theta = "y") + theme_void() plot18
关键细节说明
- 数据预处理:
mutate(Quantities = ifelse(Quantities < 250, NA, Quantities))把低数量值转为NA,既不影响Families的分类,又能让geom_col跳过这些行的绘制。 - 文本标签过滤:
data = ~filter(.x, !is.na(Quantities))确保只有有效数量的标签会被添加到饼图上,避免出现空白或NA标签。 - 图例保留:因为
fill映射的是完整的Families分类(即使对应数量为NA),ggplot2会自动在图例中保留所有类别,包括那些被隐藏的低数量家族。
内容的提问来源于stack exchange,提问作者nathan bangs
相关产品推荐
相关产品推荐

