如何用R的ggplot2绘制含三组不同颜色的散点图?
多组散点图绘制方案
你的数据当前是宽格式,要在同一张图展示三个组的散点,建议先转成长格式,再用工具绘图会更高效。
1. 宽格式转长格式
使用tidyr包的pivot_longer函数合并分组列(如果未安装包,先运行install.packages("tidyr")):
library(tidyr) # 将多列分数合并为单列,同时生成分组标识 long_df <- pivot_longer(class.df, cols = -class_day, # 保留课程天数作为X轴列 names_to = "group", # 新列存储分组名称 values_to = "score") # 新列存储分数值
转换后的数据每行对应一个观测,包含class_day(课程天数)、group(组别)、score(分数)三个字段。
2. 用ggplot2绘制(推荐)
ggplot2支持直观的分组配色和样式调整(未安装则先运行install.packages("ggplot2")):
library(ggplot2) ggplot(long_df, aes(x = class_day, y = score, color = group)) + geom_point(size = 2) + # 设置散点大小 # 自定义各组颜色,可替换为任意颜色名称/十六进制码 scale_color_manual(values = c( "control_group" = "#000000", "A_treatment_group" = "#E63946", "B_treatment_group" = "#457B9D" )) + labs(x = "课程天数", y = "分数", color = "组别") + # 设置轴标题和图例名称 theme_minimal() # 可选:使用简洁主题
3. 用Base R绘制(无需额外包)
如果不想加载第三方包,直接用Base R原生函数实现:
# 初始化画布,先绘制对照组数据 plot(class_day, control_group, type = "p", col = "black", xlab = "课程天数", ylab = "分数", # 设置X/Y轴范围,忽略NA值 xlim = range(class_day), ylim = range(c(control_group, A_treatment_group, B_treatment_group), na.rm = TRUE)) # 添加A处理组散点 points(class_day, A_treatment_group, col = "#E63946", pch = 16) # 添加B处理组散点 points(class_day, B_treatment_group, col = "#457B9D", pch = 17) # 添加图例区分各组 legend("topright", legend = c("对照组", "A处理组", "B处理组"), col = c("black", "#E63946", "#457B9D"), pch = c(1, 16, 17))
注意事项
- 处理NA值:绘图时通过
na.rm = TRUE忽略缺失值,避免报错 - 颜色自定义:可根据需求替换颜色代码,比如用
"red"、"blue"等名称,或十六进制颜色码
内容的提问来源于stack exchange,提问作者EVE
相关产品推荐
相关产品推荐

