基于Name列前缀分组绘制独立柱状图的R语言实现需求
实现方案
1. 数据预处理
先把Name列拆分成前缀(分组依据)和后缀(横轴标签)两列,方便后续分组和绘图:
library(tidyverse) # 合并两个示例数据集(若实际数据是分开的) data_combined <- bind_rows(data1, data2) # 拆分Name列,生成Prefix和Suffix列 data_processed <- data_combined %>% separate(Name, into = c("Prefix", "Suffix"), sep = "_", remove = FALSE)
2. 批量绘制分组柱状图
根据需求,有两种常用实现方式:
方式一:分面展示所有分组(快速浏览)
把所有分组的图表放在同一张画布上,用分面区分:
ggplot(data_processed, aes(x = Suffix, y = Amount)) + geom_col(fill = "#2E86AB") + facet_wrap(~Prefix, scales = "free_y") + # 每组y轴独立适配数值范围 labs(x = "处理类型", y = "含量") + theme_bw() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
方式二:生成独立图表(单独保存/查看)
通过循环为每个前缀生成单独的图片文件:
# 获取所有唯一前缀 prefix_list <- unique(data_processed$Prefix) # 循环生成并保存图表 for (prefix in prefix_list) { group_data <- filter(data_processed, Prefix == prefix) plot <- ggplot(group_data, aes(x = Suffix, y = Amount)) + geom_col(fill = "#F24C4C") + labs(title = paste("分组:", prefix), x = "处理类型", y = "含量") + theme_bw() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 按前缀命名保存图片 ggsave(filename = paste0(prefix, "_barplot.png"), plot = plot, width = 6, height = 4) }
3. 数据归一化处理
按需对每组数据做归一化,只需在预处理阶段添加计算步骤:
按组内最大值归一化(缩至0-1范围)
data_normalized <- data_processed %>% group_by(Prefix) %>% mutate(Normalized_Amount = Amount / max(Amount)) %>% ungroup()
按组内总和归一化(占比形式)
data_normalized <- data_processed %>% group_by(Prefix) %>% mutate(Normalized_Amount = Amount / sum(Amount)) %>% ungroup()
绘图时将y = Amount替换为y = Normalized_Amount即可。
内容的提问来源于stack exchange,提问作者Shaxi Liver
相关产品推荐
相关产品推荐

