0

在理解为什么我不能使用circlize包在 R 中手动将文本添加到我的 circos 图中时遇到问题。

(我的主要目标是circlize使用自定义代码来说明循环基因组中的基因顺序。我知道有绘制基因组的函数,但我想制作自己的管道。)

我已经按照此处提供的示例对我的代码进行了建模(第 1.2 节“快速浏览”)。

基本上,我首先在第一条轨道中绘制扇区(这里是基因)。在第一个磁道中,只有 2 个扇区应该着色(红色和橙色);其余的应该是灰色的。然后我尝试将文本标签(扇区/基因名称)添加到这些彩色扇区,但我得到了错误:

Error: 'circos.text' can only be used after the plotting region been created.

帮助表示赞赏!并提前感谢。:3

~ 杰特

这是说明我的问题的代码。

library(circlize); library(data.table); library(tidyverse)
circos.clear()

# Dummy data.table to test colours for different tracks (1 or 2) for 
# different genes and strands.
chromDT <- data.table(
  gene=LETTERS[1:6],
  strand=c('+', '+', '-', '-', '-', '-'),
  end=c(10, 25, 50, 55, 100, 2),
  ht1=c(0.1, 0.1, 0.05, 0.05, 0.05, 0.05),
  ht2=c(0.05, 0.05, 0.1, 0.1, 0.1, 0.1),
  col1=c('red', 'orange', 'grey50', 'grey50', 'grey50', 'grey50'),
  col2=c('grey50', 'grey50', 'green', 'blue', 'purple', 'hotpink')
)

# Circle margins
circ_marg <- c(0.5,0.5, 0.5,0.5)

# Genes on the plus and negative strand, as vector
genes_plus <- chromDT[strand=='+']$gene
genes_neg <- chromDT[strand=='-']$gene

# Plot space parameters
circos.par(
  gap.degree=0, 
  track.margin=c(0,0), 
  cell.padding=c(0.005, 1, 0.005, 1),
  circle.margin=circ_marg
)

# Matrix of x limits per sector
xMat <- cbind(rep(0, 6), chromDT$end)
rownames(xMat) <- chromDT$gene

# Intialise
circos.initialize(chromDT$gene, xlim=xMat)

# Track 1 genes (sectors)
circos.track(
  ylim=c(0,1), 
  bg.col=chromDT$col1,
  bg.border = 'grey50',
  track.height=0.15, 
)

# Plotting gene (sector) labels - throws error. :(
circos.text(
  x=xMat[genes_plus,] %>% apply(., 1, mean), 
  y=rep(1, length(genes_plus)),
  labels= genes_plus,
  track.index = 1,
  sector.index = genes_plus,
)

这是图像输出(遗憾的是,没有标签!): 在此处输入图像描述

4

0 回答 0