优化含10-13组数据的ggplot可视化配色方案求助
提升ggplot多分组曲线配色区分度的解决方案
针对你遇到的10-13个分组配色辨识度低的问题,这里有几个实用的解决方案,能帮你大幅提升曲线的区分度:
方案1:使用RColorBrewer的定性调色板
RColorBrewer提供了专门为分类数据设计的调色板,颜色差异明显,适合多分组场景。
library(ggplot2) library(reshape2) library(RColorBrewer) # 数据读取与处理 data <- read.delim(textConnection(" Groups Time_1 Time_2 Time_3 Time_4 A 63.8 60.6 65.2 66.6 B 9.4 14.0 11.1 7.5 C 7.4 8.5 6.9 8.6 D 13.9 8.4 7.9 11.4 E 1.4 3.8 5.0 1.5 F 0.2 0.2 0.2 0.2 G 1.8 2.5 1.8 2.7 H 1.0 0.9 0.9 1.1 I 45.0 42.0 49.0 38.0 J 1.0 1.1 0.9 0.5 K 0.1 2.0 6.5 1.0 L 0.5 0.9 0.5 0.2 M 0.2 0.2 0.1 0.3"), sep = " ", header = T) data_melt <- melt(data, id.var = "Groups") data_melt$value <- as.numeric(data_melt$value) # 应用Set3调色板(支持12种颜色) ggplot(data=data_melt, aes(x=variable, y=value, group = Groups, color = Groups)) + geom_point(size = 1) + geom_line(size = 1) + scale_color_brewer(palette = "Set3")
补充:如果分组超过12个,可以手动补充颜色,比如:
scale_color_manual(values = c(brewer.pal(12, "Set3"), "#FF0000"))
方案2:使用viridis离散调色板(推荐)
viridis调色板的优势在于对色觉障碍者友好,同时在黑白打印时也能通过亮度差异区分分组,还能生成任意数量的颜色,完美适配10-13个分组的需求。
library(ggplot2) library(reshape2) library(viridis) # 数据读取与处理 data <- read.delim(textConnection(" Groups Time_1 Time_2 Time_3 Time_4 A 63.8 60.6 65.2 66.6 B 9.4 14.0 11.1 7.5 C 7.4 8.5 6.9 8.6 D 13.9 8.4 7.9 11.4 E 1.4 3.8 5.0 1.5 F 0.2 0.2 0.2 0.2 G 1.8 2.5 1.8 2.7 H 1.0 0.9 0.9 1.1 I 45.0 42.0 49.0 38.0 J 1.0 1.1 0.9 0.5 K 0.1 2.0 6.5 1.0 L 0.5 0.9 0.5 0.2 M 0.2 0.2 0.1 0.3"), sep = " ", header = T) data_melt <- melt(data, id.var = "Groups") data_melt$value <- as.numeric(data_melt$value) # 应用viridis离散调色板 ggplot(data=data_melt, aes(x=variable, y=value, group = Groups, color = Groups)) + geom_point(size = 1) + geom_line(size = 1) + scale_color_viridis_d(option = "plasma", begin = 0, end = 0.9)
提示:你可以尝试
option参数的不同值(比如"viridis"、"magma"、"inferno"),找到最适合你数据的风格。
方案3:使用ggsci的专业期刊调色板
如果你需要更专业的学术风格配色,ggsci提供了多种顶级期刊的配色方案,风格严谨且区分度高。
library(ggplot2) library(reshape2) library(ggsci) # 数据读取与处理 data <- read.delim(textConnection(" Groups Time_1 Time_2 Time_3 Time_4 A 63.8 60.6 65.2 66.6 B 9.4 14.0 11.1 7.5 C 7.4 8.5 6.9 8.6 D 13.9 8.4 7.9 11.4 E 1.4 3.8 5.0 1.5 F 0.2 0.2 0.2 0.2 G 1.8 2.5 1.8 2.7 H 1.0 0.9 0.9 1.1 I 45.0 42.0 49.0 38.0 J 1.0 1.1 0.9 0.5 K 0.1 2.0 6.5 1.0 L 0.5 0.9 0.5 0.2 M 0.2 0.2 0.1 0.3"), sep = " ", header = T) data_melt <- melt(data, id.var = "Groups") data_melt$value <- as.numeric(data_melt$value) # 应用JCO期刊调色板(支持10种颜色) ggplot(data=data_melt, aes(x=variable, y=value, group = Groups, color = Groups)) + geom_point(size = 1) + geom_line(size = 1) + scale_color_jco()
补充:如果分组超过10个,可以补充自定义颜色,比如:
scale_color_manual(values = c(pal_jco()(10), "#00FF00", "#0000FF", "#FF00FF"))
方案4:自定义高区分度调色板
如果对颜色有特定需求,你可以手动挑选一组色相、饱和度差异较大的颜色,确保每个分组都清晰可辨。
library(ggplot2) library(reshape2) # 数据读取与处理 data <- read.delim(textConnection(" Groups Time_1 Time_2 Time_3 Time_4 A 63.8 60.6 65.2 66.6 B 9.4 14.0 11.1 7.5 C 7.4 8.5 6.9 8.6 D 13.9 8.4 7.9 11.4 E 1.4 3.8 5.0 1.5 F 0.2 0.2 0.2 0.2 G 1.8 2.5 1.8 2.7 H 1.0 0.9 0.9 1.1 I 45.0 42.0 49.0 38.0 J 1.0 1.1 0.9 0.5 K 0.1 2.0 6.5 1.0 L 0.5 0.9 0.5 0.2 M 0.2 0.2 0.1 0.3"), sep = " ", header = T) data_melt <- melt(data, id.var = "Groups") data_melt$value <- as.numeric(data_melt$value) # 自定义13种高区分度颜色 custom_colors <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7", "#999999", "#FF0000", "#00FF00", "#0000FF", "#FF00FF", "#FFFF00") ggplot(data=data_melt, aes(x=variable, y=value, group = Groups, color = Groups)) + geom_point(size = 1) + geom_line(size = 1) + scale_color_manual(values = custom_colors)
内容的提问来源于stack exchange,提问作者EvenStar69
相关产品推荐
相关产品推荐

