如何在R语言堆叠条形图中添加分段计数数值标签?
在R堆叠条形图中添加中心计数标签的解决方案
要给堆叠条形图的每个分段中心添加计数,核心是准确获取每个分段的x和y坐标。以下是修改后的完整代码及关键步骤说明:
# 生成各研究项目按时段的计数表格 counts <- table(all_study$study, all_study$time_of_day_num) # 转换为矩阵,便于后续行列计算 counts_mat <- as.matrix(counts) # 绘制堆叠条形图,同时保存每个条形的x轴位置 x_pos <- barplot(counts_mat, main="Distribution of Enrollment Time by Study for 24-25", col=c("blue","red","green","yellow","orange"), ylab= "Count", names.arg=c("Night", "Evening", "Day")) # 计算每个堆叠分段的中心y坐标 # 先计算每列(每个时段)的累计计数,即各分段的顶部y值 cum_counts <- apply(counts_mat, 2, cumsum) # 中心y坐标 = 分段顶部值 - 当前分段高度的一半 center_y <- cum_counts - counts_mat / 2 # 遍历所有分段,添加计数标签 for (row in 1:nrow(counts_mat)) { for (col in 1:ncol(counts_mat)) { text(x_pos[col], center_y[row, col], labels = counts_mat[row, col], cex = 0.8) } } # 添加图例 legend(0.2, 70, legend=c("MATIC","TCD-2","TROOP","Lublin","Microbiome"), fill=c("orange","yellow","green","red","blue"), cex=0.75)
关键说明:
barplot()函数会返回每个条形(对应Night/Evening/Day)的x轴位置,将其存入x_pos用于后续定位cum_counts通过按列计算累计和,得到每个堆叠分段的顶部y坐标center_y通过累计值减去当前分段高度的一半,精准定位到分段中心- 双重循环遍历所有行列,用
text()将计数标签放置在对应中心位置
内容的提问来源于stack exchange,提问作者Cami Vinz
相关产品推荐
相关产品推荐

