在R中绘制带自定义X轴标签的分组柱状图
实现分组柱状图的两种方法
首先先整理你的数据:当前df是矩阵格式,先转成数据框并把行名提取为单独列,方便后续绘图:
names <- c("a","b","c","d") val1 <- c(1,2,3,4) val2 <- c(2,3,4,5) df <- cbind(val1,val2) rownames(df) <- names # 转成数据框并提取行名为列 df <- as.data.frame(df) df$group <- rownames(df)
方法一:用Base R绘图
直接用barplot函数,设置beside=TRUE实现并列柱子,手动调整x轴标签:
# 提取需要绘图的数值列 plot_data <- df[, c("val1", "val2")] # 设置x轴位置的偏移,让标签居中 x_pos <- barplot(t(as.matrix(plot_data)), beside = TRUE, col = c("#619CFF", "#F8766D"), # 设置柱子颜色 ylab = "数值", # y轴标题 main = "分组柱状图") # 图标题 # 添加x轴标签,居中对齐 axis(1, at = colMeans(x_pos), labels = df$group, tick = FALSE) # 添加图例 legend("topright", legend = c("val1", "val2"), fill = c("#619CFF", "#F8766D"))
方法二:用ggplot2绘图(更推荐,语法更直观)
ggplot2需要把数据转为长格式(适合分组绘图),先安装并加载tidyverse包(包含ggplot2和数据处理工具):
# 安装包(首次使用需要安装) install.packages("tidyverse") # 加载包 library(tidyverse) # 把数据转为长格式 df_long <- df %>% pivot_longer(cols = c(val1, val2), names_to = "指标", values_to = "数值") # 绘制分组柱状图 ggplot(df_long, aes(x = group, y = 数值, fill = 指标)) + geom_col(position = position_dodge()) + # position_dodge实现并列柱子 labs(x = "分组", y = "数值", title = "分组柱状图") + scale_fill_manual(values = c("#619CFF", "#F8766D")) + # 设置柱子颜色 theme_minimal() # 可选:设置简洁主题
两种方法都能实现你要的并列分组柱状图,ggplot2的方法更灵活,后续调整样式更方便。
内容的提问来源于stack exchange,提问作者Vitomir
相关产品推荐
相关产品推荐

