You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中chordDiagram()函数的数值位置调整问题

问题原因

你遇到的刻度位置偏差,是因为设置了scale = T参数:这个参数会将每个扇区的总宽度归一化到1,但你手动添加的x轴刻度是基于0-1的比例区间,而实际想要的刻度应该对应原始相关系数的总和数值,两者不匹配导致位置错位。比如X3扇区的原始总和约为1.506,归一化后0.21的占比仅约0.14,所以落在0-0.25区间,但原始数值更接近0.25。

解决方法

有两种修正方式,根据你的需求选择:

方法1:移除归一化(推荐)

直接去掉scale = T参数,让扇区宽度保留原始总和的比例,同时调整x轴刻度为对应原始总和的区间:

circos.par(gap.degree = 0.8)
# 移除scale=T,保留原始扇区宽度
chordDiagram(dat, transparency = 0.5, annotationTrack = c("name", "grid"))

# 计算每个扇区的原始总和,生成对应刻度
sector_sums <- colSums(dat)
for (i in 1:ncol(dat)) {
  sector_name <- paste0("X", i)
  max_sum <- sector_sums[sector_name]
  # 生成等距刻度,按0.25间隔,不超过扇区总和
  ticks <- seq(0, ceiling(max_sum * 4)/4, 0.25)
  ticks <- ticks[ticks <= max_sum]
  circos.xaxis(sector.index = sector_name, 
               major.at = ticks, 
               minor.ticks = 0, 
               labels.cex = .5)
}

方法2:保留归一化,修正刻度映射

如果需要保持所有扇区宽度一致(scale=T),则需要将原始数值转换为归一化后的位置,再设置刻度:

circos.par(gap.degree = 0.8)
# 保留scale=T,同时记录扇区的原始总和
chordDiagram(dat, transparency = 0.5, scale = T, annotationTrack = c("name", "grid"))

sector_sums <- colSums(dat)
for (i in 1:ncol(dat)) {
  sector_name <- paste0("X", i)
  max_sum <- sector_sums[sector_name]
  # 原始数值转换为归一化位置:value / max_sum
  ticks_raw <- seq(0, ceiling(max_sum * 4)/4, 0.25)
  ticks_raw <- ticks_raw[ticks_raw <= max_sum]
  ticks_norm <- ticks_raw / max_sum
  # 显示原始数值,位置用归一化后的坐标
  circos.xaxis(sector.index = sector_name, 
               major.at = ticks_norm, 
               labels = ticks_raw,
               minor.ticks = 0, 
               labels.cex = .5)
}
效果说明

以X3和X4的连接为例:

  • 方法1中X3扇区的总和约为1.506,0.21的位置会直接对应刻度0.21附近,和你期望的位置一致;
  • 方法2中0.21对应的归一化位置约为0.14,但刻度显示的是原始数值0.21,视觉上匹配你想要的数值标注。

内容的提问来源于stack exchange,提问作者nickolakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:17:51