堆叠条形图:将Y轴改为计数刻度并添加两类观测数标注
实现双标注堆叠计数条形图
没问题!要达成你想要的效果,咱们可以调整代码的几个部分,把Y轴改成计数刻度,同时添加两种标注:
步骤1:调整条形图为计数堆叠模式
首先把原来的position="fill"(比例堆叠)换成position="stack"(计数堆叠),这样Y轴就会显示实际的观测数量,同时去掉百分比相关的Y轴设置。
步骤2:准备标注数据
我们需要两个统计数据:每个Color的总观测数,以及每个Color下Ripe=TRUE的观测数。可以用基础R的table()函数来统计:
# 统计每个Color的总数量 total_counts <- as.data.frame(table(fruit$Color)) colnames(total_counts) <- c("Color", "Total") # 统计每个Color下Ripe=TRUE的数量 true_counts <- as.data.frame(table(fruit$Color[fruit$Ripe == TRUE])) colnames(true_counts) <- c("Color", "True_Count") # 合并数据用于标注 label_data <- merge(total_counts, true_counts, by = "Color")
步骤3:添加双标注
用geom_text分别添加总计数和Ripe=TRUE的计数,注意设置inherit.aes = FALSE避免继承透明度映射,同时调整垂直位置让标注不遮挡条形:
完整代码
library(ggplot2) # 准备标注数据 total_counts <- as.data.frame(table(fruit$Color)) colnames(total_counts) <- c("Color", "Total") true_counts <- as.data.frame(table(fruit$Color[fruit$Ripe == TRUE])) colnames(true_counts) <- c("Color", "True_Count") label_data <- merge(total_counts, true_counts, by = "Color") # 绘制图表 ggplot(fruit, aes(Color)) + geom_bar(stat="count", position="stack", aes(fill=Color, color=Color, alpha=Ripe)) + # 添加总计数标注(条形顶部) geom_text(data = label_data, aes(x = Color, y = Total, label = Total), inherit.aes = FALSE, vjust = -0.5, size = 4) + # 添加Ripe=TRUE的计数标注(对应段顶部) geom_text(data = label_data, aes(x = Color, y = True_Count, label = True_Count), inherit.aes = FALSE, vjust = -0.5, size = 4, color = "darkred") + scale_alpha_discrete(range=c(1,0.6))+ theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())+ scale_color_manual(values = c("Black", "Black", "Black"))+ guides(fill = guide_legend(override.aes = list(colour = NA))) + labs(y = "观测计数") # 添加Y轴标题
效果说明
- Y轴现在显示的是每个
Color的实际观测计数 - 每个条形顶部的数值是对应
Color的总观测数 - 每个条形下半部分(
Ripe=TRUE段)顶部的红色数值是该Color下Ripe=TRUE的观测数(你可以根据需要调整颜色和大小)
内容的提问来源于stack exchange,提问作者guidebortoli
相关产品推荐
相关产品推荐

