如何在R语言中设置弦图连接条边框比内部填充更深色
弦图连接条边框颜色加深方案
需求说明
希望让弦图的连接条(linkers)边框颜色比内部填充颜色更深。
示例数据代码
set.seed(999) mat = matrix(sample(18, 18), 3, 6) rownames(mat) = paste0("S", 1:3) colnames(mat) = paste0("E", 1:6) mat df = data.frame(from = rep(rownames(mat), times = ncol(mat)), to = rep(colnames(mat), each = nrow(mat)), value = as.vector(mat), stringsAsFactors = FALSE)
当前使用代码
par(mfrow = c(1, 2)) chordDiagram(mat, order = c("S2", "S1", "S3", "E4", "E1", "E5", "E2", "E6", "E3"))
实现方法
通过chordDiagram函数的link.border参数自定义边框颜色,同时基于连接条填充色生成更深的版本即可,具体示例如下:
方案1:基于默认填充色自动生成深色边框
library(circlize) library(colorspace) # 用于快速调整颜色深浅 par(mfrow = c(1, 2)) chordDiagram(mat, order = c("S2", "S1", "S3", "E4", "E1", "E5", "E2", "E6", "E3"), # 为每个连接条生成比填充色深20%的边框色 link.border = lapply(rand_color(nrow(df)), function(col) { darken(col, amount = 0.2) }))
方案2:手动指定填充色与对应深色边框
library(circlize) library(colorspace) par(mfrow = c(1, 2)) # 自定义连接条填充色 custom_fill = c("#FF9999", "#99FF99", "#9999FF", "#FFCC99", "#CC99FF", "#99CCFF", "#FF6666", "#66FF66", "#6666FF", "#FF9966", "#9966FF", "#6699FF", "#FF3333", "#33FF33", "#3333FF", "#FF6633", "#6633FF", "#3366FF") # 生成比填充色深30%的边框色 custom_border = lapply(custom_fill, function(col) darken(col, 0.3)) chordDiagram(df, order = c("S2", "S1", "S3", "E4", "E1", "E5", "E2", "E6", "E3"), link.col = custom_fill, link.border = custom_border)
无额外包依赖的颜色加深方法
如果不想加载colorspace包,可以自己实现颜色加深函数:
darken_color = function(col, amount = 0.2) { rgb_vals = col2rgb(col) / 255 rgb_vals = rgb_vals * (1 - amount) rgb(rgb_vals[1], rgb_vals[2], rgb_vals[3]) } # 使用示例 chordDiagram(mat, order = c("S2", "S1", "S3", "E4", "E1", "E5", "E2", "E6", "E3"), link.border = lapply(rand_color(nrow(df)), darken_color))
内容的提问来源于stack exchange,提问作者Nido
相关产品推荐
相关产品推荐

