R语言如何按分类变量拆分散点图并添加拟合线
实现方法
你可以根据是否需要单独编辑每张图,选择以下两种方案:
方案1:生成3张完全独立的图表,可分别导出、调整参数
该方案会为每个分类生成单独的ggplot对象,适合需要对单张图做个性化修改、分别保存的场景:
library(tidyverse) library(readxl) # 读取数据 Data.tibble <- read_excel('你的文件路径.xlsx') # 按Category分类拆分数据,批量生成散点图+拟合线 plot_list <- Data.tibble %>% group_by(Category) %>% group_split() %>% map(~ ggplot(.x, aes(x = x, y = y)) + geom_point(size = 2) + # 如需线性拟合保留method="lm",要默认局部拟合删除该参数即可;se=TRUE可显示置信区间 geom_smooth(method = "lm", se = FALSE, color = "red") ) # 调用单张图示例:第1个分类对应plot_list[[1]],第2个对应plot_list[[2]],以此类推 # 批量导出到本地示例 walk2(plot_list, unique(Data.tibble$Category), ~ ggsave(paste0("Category_", .y, ".png"), .x, width = 5, height = 4))
方案2:同一画布下生成3张子图(格式统一,生成效率高)
如果仅需要对比展示、不需要单独编辑每张图,直接使用分面语法即可实现:
Data.tibble %>% ggplot(aes(x = x, y = y)) + geom_point(size = 2) + geom_smooth(method = "lm", se = FALSE, color = "red") + # 按Category分面,nrow设置行数,scales="free"可让每张图自适应坐标轴范围 facet_wrap(vars(Category), nrow = 1, scales = "free")
你的数据结构参考:
内容的提问来源于stack exchange,提问作者David N.F.
相关产品推荐
相关产品推荐

