如何按X数据集每3行手动设置PLS-DA图中点的颜色?
解决方案:按固定行数分组自定义PLS-DA散点颜色
mixOmics的plotIndiv函数的col参数并非只能接受分组因子,它可以直接接收长度与样本数一致的颜色向量,每个元素对应一个样本点的颜色。我们可以通过手动生成按每3行循环的颜色序列来实现你的需求。
示例代码(前6个点演示)
if(!require(mixOmics)) install.packages("mixOmics", repos = "http://cran.us.r-project.org") suppressWarnings(library(mixOmics, verbose = FALSE)) data(iris) # 取前6个样本演示(1-3蓝,4-6绿) X <- iris[1:6, 1:4] Y <- iris$Species[1:6] # 生成按每3个样本循环的颜色向量 # 可自定义颜色列表,后续按需拓展 color_vec <- rep(c("blue", "green"), length.out = nrow(X)) # 执行PLS-DA plsda <- plsda(X, Y, ncomp = 2) # 绘图时传入自定义颜色向量 plotIndiv(plsda, ind.names = FALSE, legend = TRUE, comp = c(1,2), ellipse = FALSE, pch = 16, title = "PLS-DA 按每3行分组着色", star = TRUE, cex = 1.5, point.lwd = 1, X.label = 'LV1', Y.label = 'LV2', col = color_vec) # 关键:传入自定义颜色向量
拓展说明
- 如果需要更多颜色循环,只需在
rep的第一个参数里添加颜色即可,比如rep(c("blue", "green", "red", "purple"), length.out = nrow(X)),会按每3个样本依次使用蓝、绿、红、紫循环。 - 若不需要默认的分组图例,可将
legend = FALSE,或者用legend参数自定义图例内容。 - 要对全量数据着色,去掉
X和Y的行索引限制即可,颜色向量会自动匹配所有样本数。
内容的提问来源于stack exchange,提问作者dkcongo
相关产品推荐
相关产品推荐

