如何在R语言barplot函数中合并堆叠柱状图的重复分组标签
R语言base包barplot堆叠柱状图分组标签去重方案
核心实现思路:先关闭barplot默认的x轴标签输出,捕获函数返回的各柱子x轴坐标,按分组计算每个组的居中位置,仅在对应位置输出1次分组标签即可。
改造后的完整代码如下:
# 原有数据读取和处理逻辑 teste <- read.table(file.choose(), header = TRUE) prop <- subset(teste, select = -nome) # 绘制堆叠柱,禁用默认x轴输出,同时保存所有柱子的x轴中心坐标 bp_pos <- barplot(t(as.matrix(prop)), col = rainbow(6), xaxt = "n", space = 0) # 处理分组标签,计算每个组标签的摆放位置 group_labels <- teste$nome # 按出现顺序提取不重复的分组名 unique_groups <- unique(group_labels) # 计算每个分组对应所有柱子的中心位置的中点,作为标签摆放坐标 label_pos <- tapply(bp_pos, group_labels, function(x) mean(range(x))) # 手动绘制x轴标签,每个分组仅显示一次 axis(side = 1, at = label_pos, labels = unique_groups, tick = FALSE) # 可选补充:添加分组之间的分隔虚线,区分不同组别 group_lengths <- rle(group_labels)$lengths sep_points <- cumsum(group_lengths)[-length(group_lengths)] + 0.5 abline(v = sep_points, lty = 2, col = "gray60")
关键参数说明
xaxt = "n":禁用barplot默认生成的x轴,避免重复标签输出- barplot返回值
bp_pos:长度和柱子数量一致的向量,每个值对应一个柱子的x轴中心坐标 tapply按分组对柱子坐标聚合,计算每组的中点位置,保证标签居中显示在对应组的正下方
内容的提问来源于stack exchange,提问作者brunomiwa
相关产品推荐
相关产品推荐

