如何将R语言barplot变量名移至顶部并调整柱状图显示样式
解决R语言barplot的两个需求:轴标签上移+分组层级展示
1. 先修正基础代码
你的代码中定义了矩阵但未赋值给matriz_plot,先补上这一步保证代码可运行:
matriz_plot <- matrix(c(1, 0, 0, 0, 0.9375, 0.0625, 0, 0, 1, 0, 0, 0, 0.8125, 0.0625, 0.125, 0, 0.75, 0.1875, 0, 0.0625, 0.625, 0.125, 0.875, 0.0625, 0.5, 0.125, 0.125,0.25), nrow = 4, ncol = 7)
2. 将x轴变量名移到顶部
默认barplot()的x轴标签在底部,要移到顶部需手动隐藏默认轴,再在顶部重新绘制:
# 绘制柱状图,隐藏默认x轴 bp <- barplot(matriz_plot, col=c("red","white"), col.axis="blue", border="black", ylim=c(0, 4), xaxt="n") # 在顶部添加x轴刻度和标签 axis(3, at=bp, labels=colnames(matriz_plot) %||% paste0("变量", 1:ncol(matriz_plot)), col.axis="blue") # 可选:添加x轴标题 mtext("变量名称", side=3, line=2, col="blue")
注:如果矩阵没有列名,%||%会自动生成变量1到变量7的标签,你也可以手动指定,比如labels=c("A","B","C","D","E","F","G")
3. 将堆叠改为分组层级展示
你提到的目标样式是让4个变量(矩阵行)在每个类别下并排展示,而非堆叠。只需转置矩阵并使用beside=TRUE参数:
# 转置矩阵:将原矩阵的列转为分组,行转为每组内的柱子 matriz_transposed <- t(matriz_plot) # 绘制分组柱状图,beside=TRUE实现并排展示 bp_group <- barplot(matriz_transposed, col=c("red","white","green","yellow"), # 对应4个变量的颜色 col.axis="blue", border="black", ylim=c(0, 1.2), # 调整y轴适配0-1的数值范围 xaxt="n", beside=TRUE) # 在顶部添加分组标签(对应原矩阵的7个列) axis(3, at=colMeans(matrix(bp_group, ncol=4)), # 计算每组的中点位置 labels=paste0("类别", 1:ncol(matriz_plot)), col.axis="blue") # 添加图例区分4个变量 legend("topright", legend=paste0("变量", 1:nrow(matriz_plot)), fill=c("red","white","green","yellow"), bty="n")
合并两个需求的完整代码
同时实现标签上移+分组展示的完整代码:
# 定义矩阵 matriz_plot <- matrix(c(1, 0, 0, 0, 0.9375, 0.0625, 0, 0, 1, 0, 0, 0, 0.8125, 0.0625, 0.125, 0, 0.75, 0.1875, 0, 0.0625, 0.625, 0.125, 0.875, 0.0625, 0.5, 0.125, 0.125,0.25), nrow = 4, ncol = 7) # 转置矩阵 matriz_transposed <- t(matriz_plot) # 绘制分组柱状图,隐藏默认x轴 bp_group <- barplot(matriz_transposed, col=c("red","white","green","yellow"), col.axis="blue", border="black", ylim=c(0, 1.2), xaxt="n", beside=TRUE) # 添加顶部x轴标签 axis(3, at=colMeans(matrix(bp_group, ncol=4)), labels=paste0("类别", 1:ncol(matriz_plot)), col.axis="blue") mtext("类别名称", side=3, line=2, col="blue") # 添加y轴标题(可选) mtext("数值", side=2, line=2, col="blue") # 添加图例 legend("topright", legend=paste0("变量", 1:nrow(matriz_plot)), fill=c("red","white","green","yellow"), bty="n")
内容的提问来源于stack exchange,提问作者doloresafwat
相关产品推荐
相关产品推荐

