如何在ggplot中为训练与测试数据集的对应线条匹配颜色?
解决思路
要实现训练集和测试集折线的颜色匹配,核心是给两组数据中对应的线条分配相同的分组标识,再基于这个标识统一指定颜色。具体步骤如下:
步骤1:整理匹配关系
首先把你的matching矩阵转换成清晰的对应数据框,明确训练集终端值和测试集终端值的配对关系:
# 转换为数据框并命名列,添加分组ID用于颜色映射 matching_df <- as.data.frame(matching) colnames(matching_df) <- c("train_val", "test_val") matching_df$group_id <- paste0("group_", 1:nrow(matching_df))
这样我们就得到了明确的配对规则:
- group_1:训练值
0.9497↔ 测试值0.8838 - group_2:训练值
0.9579↔ 测试值0.8896
步骤2:给数据集添加分组标识
接下来需要从data_1和data_2中提取ID=100的终端值,匹配到对应的group_id,确保对应线条拥有相同的分组标识:
# 处理训练集data_1:匹配终端值到分组ID train_terminal <- data_1[data_1$ID == 100, ] data_1 <- merge(data_1, matching_df[, c("train_val", "group_id")], by.x = "value", by.y = "train_val", all.x = TRUE) # 处理测试集data_2:匹配终端值到分组ID test_terminal <- data_2[data_2$ID == 100, ] data_2 <- merge(data_2, matching_df[, c("test_val", "group_id")], by.x = "value", by.y = "test_val", all.x = TRUE)
注:如果你的data_1/data_2中,每条线的终端值与trainauc/testauc是一一对应的,上述代码可以直接使用;若存在重复值,可结合trainauc/testauc变量来强化匹配准确性。
步骤3:统一颜色映射并绘图
现在用group_id作为颜色映射的变量,自定义一组颜色,让相同group_id的线条在两幅图中颜色完全一致:
library(ggplot2) library(gridExtra) # 自定义颜色(可根据需求替换为任意配色) custom_colors <- c("group_1" = "#2E86AB", "group_2" = "#F24C4C") # 绘制训练集折线图 p1 <- ggplot(data_1, aes(x = ID, y = value)) + geom_line(aes(colour = group_id)) + scale_color_manual(values = custom_colors) + theme(legend.position = "none") # 绘制测试集折线图 p2 <- ggplot(data_2, aes(x = ID, y = value)) + geom_line(aes(colour = group_id)) + scale_color_manual(values = custom_colors) + theme(legend.position = "none") # 并排展示两幅图 grid.arrange(p1, p2, ncol = 2)
额外提示
- 如果你需要更多配色选项,可以使用
RColorBrewer包的调色板,比如:custom_colors <- RColorBrewer::brewer.pal(2, "Set1") - 若要验证匹配是否正确,可以临时打开图例(把
legend.position设为"right"),检查两组图的分组颜色是否对应。
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

