R语言ggplot绘制分组多线图:颜色未按指定显示的原因
R语言ggplot多线图颜色异常问题解决
问题原因
你遇到的黄、绿、粉等未指定颜色,核心原因是代码语法错误:ggplot图层叠加的+号位置不正确,导致scale_color_manual自定义颜色设置未被正确加载,ggplot自动使用了默认的颜色调色板。
你的原代码中,geom_line()语句结束后换行,+scale_color_manual(...)的+号单独在行首,R会将其识别为独立表达式,无法与前面的ggplot对象衔接,因此自定义颜色规则失效。
修正方案
1. 修复语法错误
确保所有图层叠加的+号放在上一行末尾,保证代码连续衔接。
2. 优化变量映射(更贴合需求)
根据你的要求,创建两个独立分组变量:一个区分test1/test2(控制颜色),一个区分模型类型(控制线型),避免用单一变量同时映射两个属性,逻辑更清晰。
完整修正代码
第一步:处理数据集,生成分组变量
roc_mj_cmb_t1= c(0.8115,0.8060,0.8114,0.8340,0.8789,0.8743,0.8807,0.8838, 0.7946,0.7904,0.8245,0.8198,0.8721,0.8686,0.8876,0.8763, 0.8204,0.8146,0.7982,0.8350, 0.7977,0.8021,0.8137,0.8176) roc_mj_lab= c(rep("Y1_uni_cmb_test1",4),rep("Y1_Joint_test1",4), rep("Y1_uni_cmb_test2",4),rep("Y1_Joint_test2",4), rep("Y1_uni_both_test1",4), rep("Y1_uni_both_test2",4)) settin=c("setting 1","setting 2","setting 3","setting 4","setting 1","setting 2","setting 3","setting 4" ,"setting 1","setting 2","setting 3","setting 4","setting 1","setting 2","setting 3","setting 4" ,"setting 1","setting 2","setting 3","setting 4","setting 1","setting 2","setting 3","setting 4") data_mj=data.frame(settin,roc_mj_cmb_t1,roc_mj_lab) # 生成颜色分组:test1统一蓝色,test2统一红色 data_mj$color_group <- ifelse(grepl("test1", data_mj$roc_mj_lab), "test1", "test2") # 生成线型分组:提取模型类型(uni_cmb/Joint/uni_both) data_mj$line_type_group <- gsub("Y1_([^_]+)_test\\d", "\\1", data_mj$roc_mj_lab)
第二步:ggplot绘图代码
ggplot(data = data_mj, aes(y = roc_mj_cmb_t1, x = settin, group = roc_mj_lab)) + geom_line(aes(color = color_group, linetype = line_type_group)) + scale_color_manual(values = c("test1" = "blue", "test2" = "red")) + scale_linetype_manual(values = c("uni_cmb" = "longdash", "Joint" = "solid", "uni_both" = "dotted")) + ylim(0.75, 0.9) + labs(color = "测试组", linetype = "模型类型") # 可选:添加图例标题,提升可读性
说明
- 用
color_group单独控制颜色,确保所有test1线条为蓝色,test2为红色; - 用
line_type_group控制线型,同一测试组内的3种模型用不同线型区分; - 使用命名参数设置颜色和线型,避免因因子顺序导致的映射错误,稳定性更强;
- 修复后的
+号位置确保所有自定义设置都能被ggplot正确加载。
内容的提问来源于stack exchange,提问作者student_R123
相关产品推荐
相关产品推荐

