Наложение круговых множественных столбцов в R - PullRequest
7 голосов
/ 23 февраля 2012

Вот мои данные:

chr <- rep (1:4, each = 200) 

position <- c(1:200, 1:200, 1:200, 1:200)

v1bar <- rnorm(800, 10, 2)

v2bar <- rnorm(800, 10, 2)

v3bar <- rnorm(800, 10, 2)

mydata <- data.frame (chr, position, v1bar, v2bar, v3bar)

Я хочу создать несколько круговых гистограмм со значениями x = pos и y = v1bar, v2bar, v3bar (все три будут в последовательных кругах),Каждый круг делится на хр.Таким образом, у каждого круга есть «кусок пирога».Я не уверен, что такое граф известен, и можно ли будет его разработать.Ниже приведен лишь грубый набросок, иллюстрирующий мою идею.

enter image description here

Правки. Мое предположение в некоторой степени похоже на следующий рисунок в цирке.

http://circos.ca/tutorials/images/zoom/8.8

РЕДАКТИРОВАТЬ:

В ответ на следующий ответ Дэвиду, это то, что я вообразил - chr не отдельная финица, но классифицируется как другой срез(например, на рисунке) enter image description here

Ответы [ 2 ]

12 голосов
/ 23 февраля 2012

Поскольку вы представляете хромосомы по кругу, попробуйте инструменты, предоставляемые пакетом ecolitk , предоставленным Bioconductor, который включает в себя инструменты для нанесения различных видов форм на круглые хромосомы.

ETA: Вот пример его использования для создания круговой гистограммы, хотя он лишь царапает поверхность того, что вы можете с ним сделать.

circular plot

library(ecolitk)

plot.new()
plot.window(c(-5, 5), c(-5, 5))

plot.chrom = function(data, chromlength, radius=1,
                        width=chromlength/length(data), ...) {
    linesCircle(radius, ...)
    starts = seq(1, chromlength - width, width)

    scale = .5 / max(abs(data))
    for (i in 1:length(starts)) {
        polygonChrom(starts[i], starts[i]+width, chromlength, radius,
                data[i] * scale + radius, ...)
    }
}

plot.chrom(rnorm(100, 10, 1), 10000, radius=1)
plot.chrom(rnorm(100, 10, 2), 10000, radius=2, col="blue")
plot.chrom(rnorm(100, 10, 5), 10000, radius=3, col="red")
plot.chrom(rnorm(100, 10, 10), 10000, radius=4, col="green")

legend("topright", legend=c("chr1", "chr2", "chr3", "chr4"),
       col=c("black", "blue", "red", "green"), lty=1)

ETAАх, теперь я понимаю, что вы имели в виду под разделением участков.В этом случае этот код должен быть тем, что вы ищете.Он использует данные, которые вы предоставляете (с одной небольшой модификацией - мне пришлось дать имя столбцу хромосомы, чтобы я мог использовать ddply с ним) и позволяет вам указать расстояние между хромосомами.Несмотря на то, что я не тестировал его подробно, различные вещи, такие как длина отдельных хромосом, среднее значение и дисперсия смоделированных данных, должны работать, как вы ожидаете.

Circular plot divided

plot.multi.chrom = function(data, colors, spacing=50) {
    plot.new()
    plot.window(c(-5, 5), c(-5, 5))

    lengths = ddply(data, .(chr), function(x) max(x$position))
    nchrom = NROW(lengths)
    offsets = cumsum(c(0, lengths[, 2])) + cumsum(c(0, rep(spacing, nchrom)))
    tot.length = offsets[length(offsets)] + spacing

    scales = .75 / apply(abs(data[, 3:NCOL(data)]), 2, max)

    for (i in 1:NROW(data)) {
        for (j in 3:NCOL(data)) {
            start = offsets[data[i, 1]] + data[i, 2]
            polygonChrom(start, start + 1, tot.length,
                         j - 2, data[i, j] * scales[j - 2] + j - 2,
                         col=colors[j - 2])
        }
    }
}

chr <- rep (1:4, each = 200) 
position <- c(1:200, 1:200, 1:200, 1:200)
v1bar <- rnorm(800, 10, 2)
v2bar <- rnorm(800, 10, 2)
v3bar <- rnorm(800, 10, 2)
mydata <- data.frame(chr=chr, position, v1bar, v2bar, v3bar)

 require(plyr) 

plot.multi.chrom(mydata, colors=c("red", "black", "green"), spacing=50)

legend("topright", legend=c("V1", "V2", "V3"),
       col=c("red", "black", "green"), lty=1)
0 голосов
/ 31 декабря 2013

OmicCircos в R / Bioconductor имеет возможность рисовать наложенные круговые гистограммы.Команда OmicCircos circos принимает аргумент с именем cir , где вы можете указать собственные сегменты генома или хромосомы.Для гистограммы он имеет аргумент тип , где вы можете указать один из столбчатого графика, прямоугольника, гистограммы и т. Д.

Проверка Сценарий Vignette R - номер чанка кода14: OmicCircos4vignette1 для более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...