2015-04-14 6 views
1

Я создал сюжет, похожий на тот, на странице 8 circlize учебник здесь: http://cran.r-project.org/web/packages/circlize/vignettes/genomic_plot.pdfГруппировка дорожки в пакете circlize в R

Теперь я пытаюсь наложить дополнительный трек поверх имен генов , который показывает группировку генов в более крупные категории (на изображении ниже, взятом из виньетки, я пытаюсь добавить синие линии, надеясь получить более красивое изображение с окном).

У меня есть новый фрейм данных с началом и остановкой каждой из этих более широких областей и ярлыками (которые я пытаюсь добавить поверх этих регионов).

enter image description here

Я попытался с xlim, ylim и индексную информацию от предыдущего черчения, но у меня возникают проблемы, так как это новый кадр данных.

Это то, что я делаю: сказать, что мой новый dataframe (с теми же координатами, что и основные данные) заключается в следующем:

df = structure(list(Chr = c("chr1", "chr10", "chr12"), pos.start = c(2e+06, 2e+06, 2e+06), pos.end = c(3e+06, 6e+06, 3e+06), name = c("A", "B", "C")), .Names = c("Chr", "pos.start", "pos.end", "name"), row.names = c(1L, 2L, 3L), class = "data.frame") 

После инициализации circos используя мой основной набор данных, и это факторы генов, как и в пример виньетка, я пытаюсь добавить трек, как это:

circos.trackPlotRegion(ylim = c(0.5, 0.5), track.index=1, 
panel.fun = function(x, y) { 
chr = get.cell.meta.data("sector.index") 
# find regions in this chromosome 
regions = unique(df[df$Chr == chr, , drop = FALSE]$name) 
df2 = df[df$Chr == chr, , drop = FALSE] 
for(i in seq_len(nrow(df2))) { 
    region = which(regions %in% df2$name[i]) 
    circos.rect(region, 0.2, 
      region, 0.2, color="blue", border = NA) 
} 
}, bg.border = NA) 

И я получаю эту ошибку: «ошибки в случае (ncut) {: аргумент не интерпретирован, как логические».

Что я делаю неправильно?

Я также попытался наложить весь новый сюжет с использованием параметра par (new = TRUE), но я не могу заставить его совпадать точно с моим предыдущим сюжетом, поскольку он масштабируется, чтобы соответствовать всему кругу (в то время как у меня есть только определенные сегменты для более широких регионов). Если у кого-нибудь есть указатели на то, как нарисовать эту область наложения (используя другой набор данных, определяющий эти более широкие области) в круге в R, я бы очень это оценил!

Благодарим за помощь!

ответ

1

Если вы хотите покрыть все сектора, например. если вы хотите нарисовать линию для покрытия двух генов (каждый ген является сектором на графике), вы можете попробовать highlight.sector(). Функция добавлена ​​в circlize совсем недавно, вы можете обновить circlize до последней версии.

Чтобы использовать highlight.sector(), сначала необходимо создать дорожку (с очень маленькой высотой), а затем выделить два гена в этом треке, указав индекс для дорожек и секторов. Простой пример выглядит следующим образом (левый рисунок):

######################################### 
# example 1: cover the whole sectors 
o.cell.padding = circos.par("cell.padding") 

circos.initializeWithIdeogram(plotType = NULL) 
circos.trackPlotRegion(ylim = c(0, 1), track.height = 0.01, bg.border = NA, 
    cell.padding = c(0, o.cell.padding[2], 0, o.cell.padding[4])) 
circos.trackPlotRegion(ylim = c(0, 1)) 

highlight.sector(sector.index = c("chr1", "chr2"), track.index = 1, 
    col = "red", border = NA) 
circos.clear() 

Если вы хотите, чтобы выделить только часть секторов, вы должны использовать вместо draw.sector(). draw.sector(), как и rect(), ожидает координаты (измеренные в полярной системе координат) для двух углов. Однако расчет правильных координат немного сложнее. Функция circlize() даст вам полярные координаты, преобразуясь из координаты данных в каждой ячейке. Но вам нужно сопоставить точку данных с правильным сектором.Вы можете увидеть идею из следующего примера (на рисунке справа)

############################################ 
# example 2: cover only part of the sectors 
o.cell.padding = circos.par("cell.padding") 

circos.initializeWithIdeogram(plotType = NULL) 
circos.trackPlotRegion(ylim = c(0, 1), track.height = 0.01, bg.border = NA, 
    cell.padding = c(0, o.cell.padding[2], 0, o.cell.padding[4])) 
circos.trackPlotRegion(ylim = c(0, 1)) 

pos1 = circlize(1e8, 0, sector.index = "chr1", track.index = 1) 
pos2 = circlize(1e8, 1, sector.index = "chr2", track.index = 1) 
draw.sector(pos1[1, "theta"], pos2[1, "theta"], pos1[1, "rou"], pos2[1, "rou"], 
    clock.wise = TRUE, col = "red", border = NA) 
circos.clear() 

enter image description here

Смежные вопросы