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

如何在R语言绘制的弦图中显示原始行名

解决circlize弦图扇区标签显示R1/R2而非原始行名的问题

问题描述

我希望在R语言绘制的弦图中,将扇区标签替换为原始数据的行名,而非当前显示的R1、R2、R3。尝试了以下代码,但生成的弦图仍显示R1、R2、R3等默认标签:

library(circlize)
library(readr)
df <- read_csv("chord_diag_final.csv", show_col_types = FALSE)
rownames(df) <- df[[1]]
df <- df[,-1]
print(rownames(df))
data <- as.matrix(df)

chordDiagram(as.data.frame(data), annotationTrack = "grid", preAllocateTracks = 1)
circos.trackPlotRegion(track.index = 2, panel.fun = function(x, y) {
  xlim = get.cell.meta.data("xlim")
  ylim = get.cell.meta.data("ylim")
  sector.name = get.cell.meta.data("sector.index")
  
  circos.text(mean(xlim), ylim[1] + 2.5, sector.name, 
              facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5), cex=0.6)
  
  circos.axis(h = "top", labels.cex = 0.5, major.tick.percentage = 0.2, 
              sector.index = sector.name, track.index = 2)
}, bg.border = NA)

解决方案

问题出在将矩阵转换为data.frame时,行名信息丢失,导致chordDiagram使用默认的R1/R2命名。修正方法如下:

修正后的代码

library(circlize)
library(readr)

# 读取数据并设置行名
df <- read_csv("chord_diag_final.csv", show_col_types = FALSE)
rownames(df) <- df[[1]]
df <- df[,-1]

# 转换为矩阵,并确保列名与行名一致(因为数据是对称的,行/列对应同一类别)
data_matrix <- as.matrix(df)
colnames(data_matrix) <- rownames(data_matrix)

# 直接传入矩阵到chordDiagram,无需转成data.frame
chordDiagram(data_matrix, annotationTrack = "grid", preAllocateTracks = 1)

# 绘制自定义标签和轴
circos.trackPlotRegion(track.index = 2, panel.fun = function(x, y) {
  xlim <- get.cell.meta.data("xlim")
  ylim <- get.cell.meta.data("ylim")
  sector.name <- get.cell.meta.data("sector.index")
  
  circos.text(mean(xlim), ylim[1] + 2.5, sector.name, 
              facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5), cex=0.6)
  
  circos.axis(h = "top", labels.cex = 0.5, major.tick.percentage = 0.2, 
              sector.index = sector.name, track.index = 2)
}, bg.border = NA)

# 关闭circos绘图环境,避免后续冲突
circos.clear()

关键修正点

  1. 保留矩阵的行/列名:不要将矩阵转换为data.frame,直接使用带命名的矩阵传入chordDiagram,函数会自动识别行名和列名作为扇区标签。
  2. 统一列名与行名:因为你的数据是对称关联矩阵,列名需要和行名保持一致,确保扇区对应原始类别名称。
  3. 添加circos.clear():完成绘图后清理circos环境,避免影响后续绘图操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:29:56