按列分组绘制分组条形图的实现问题咨询
嘿,我懂你要的效果啦——就是每个列对应的两个数值(第一行红、第二行绿)并排展示,按列的顺序依次排列对吧?咱们分两种方法来实现,一种是用更直接的基础R工具,另一种是更灵活美观的ggplot2,你可以选自己顺手的来。
方法1:基础R的barplot(无需额外安装包)
你的数据结构其实刚好适配基础R的分组条形图功能,只需要简单调整参数就能实现需求:
# 你的原始数据 x1 <- c(23.5, 21.8, 13.5, 12.3, 11.1) x2 <- c(14.5, 23.5, 9.0, 17.5, 6.7) x3 <- rbind(x1,x2) x4 <- as.data.frame(x3) # 给行命名,方便后续图例识别 rownames(x4) <- c("x1", "x2") # 绘制分组条形图 barplot( as.matrix(x4), # 将数据框转为矩阵格式 beside = TRUE, # 设置为分组条形(让同列的两个数值并排) col = c("red", "green"), # 指定第一行x1为红色,第二行x2为绿色 main = "分组条形图(按列分组)", xlab = "类别", ylab = "数值", width = 0.8 # 调整条形的宽度 ) # 添加图例,方便区分两组数据 legend("topright", legend = rownames(x4), fill = c("red", "green"))
运行这段代码后,图表就会按你要的顺序展示:先显示第一列的23.5(红)和14.5(绿),接着是第二列的21.8和23.5,以此类推。
方法2:用ggplot2(更易定制美观度)
如果你想要更灵活的图表样式(比如调整配色、字体、布局),可以用ggplot2来实现,不过需要先把数据转成ggplot偏好的长格式:
首先安装并加载所需的包:
install.packages(c("ggplot2", "tidyr")) library(ggplot2) library(tidyr)
然后整理数据并绘图:
# 你的原始数据 x1 <- c(23.5, 21.8, 13.5, 12.3, 11.1) x2 <- c(14.5, 23.5, 9.0, 17.5, 6.7) x3 <- rbind(x1,x2) x4 <- as.data.frame(x3) rownames(x4) <- c("x1", "x2") # 把宽格式数据转成长格式(ggplot的标准输入格式) x_long <- x4 %>% rownames_to_column(var = "组别") %>% # 将行名转为单独一列 pivot_longer(cols = -组别, names_to = "类别", values_to = "数值") # 将列名和数值拆分为两列 # 绘制分组条形图 ggplot(x_long, aes(x = 类别, y = 数值, fill = 组别)) + geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) + scale_fill_manual(values = c("x1" = "red", "x2" = "green")) + # 指定自定义颜色 labs(title = "分组条形图(按列分组)", x = "类别", y = "数值") + theme_minimal()
这里的position_dodge(width=0.8)用来控制同类别下两个条形的间距,width=0.7用来调整单个条形的宽度,你可以根据喜好修改这两个参数。
两种方法都能完美实现你要的效果,选自己用着顺手的就行!
内容的提问来源于stack exchange,提问作者melanie chetry
相关产品推荐
相关产品推荐

