如何在R的barplot()中将两个分组堆叠条形图并列展示?
解决方法
问题出在直接用rbind()合并不同长度的分组变量,导致矩阵结构不符合需求。要实现两个并列的堆叠条形,需要先统一变量维度,给缺失的变量填充0,再构造正确的矩阵传入barplot()。
步骤1:准备数据并计算堆叠高度
先定义示例数据(替换成你的实际数值即可):
# 示例变量数值 A <- 4 B <- 6 C <- 5 D <- 8 E <- 7 group1 <- c(A, B, C) group2 <- c(D, E)
计算每个分组的平均值,再算出每个变量在分组内占比对应的堆叠高度(保证每个条形总高度为分组平均值):
# Group1的堆叠高度计算 mean_group1 <- mean(group1) sum_group1 <- sum(group1) height_A <- A / sum_group1 * mean_group1 height_B <- B / sum_group1 * mean_group1 height_C <- C / sum_group1 * mean_group1 # Group2的堆叠高度计算 mean_group2 <- mean(group2) sum_group2 <- sum(group2) height_D <- D / sum_group2 * mean_group2 height_E <- E / sum_group2 * mean_group2
步骤2:构造统一维度的矩阵
将所有变量的高度整理成矩阵,缺失的变量用0填充,列对应分组,行对应变量:
plot_matrix <- matrix( c(height_A, 0, height_B, 0, height_C, 0, 0, height_D, 0, height_E), nrow = 5, ncol = 2, dimnames = list(c("A", "B", "C", "D", "E"), c("Group 1", "Group 2")) )
步骤3:绘制并列堆叠条形图
调用barplot()生成图表,设置对应颜色与图例:
barplot( plot_matrix, col = c("Red", "Green", "Blue", "Yellow", "Pink"), legend.text = rownames(plot_matrix), args.legend = list(x = "topright"), ylab = "平均值", main = "分组变量堆叠条形图" )
执行后会得到两个并列的条形:第一个是Group1的堆叠(A、B、C三色,总高度为Group1平均值),第二个是Group2的堆叠(D、E两色,总高度为Group2平均值)。
内容的提问来源于stack exchange,提问作者Browndog
相关产品推荐
相关产品推荐

