以下是我的数据:
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)
Run Code Online (Sandbox Code Playgroud)
我想创建多个圆形条形图,其中x值= pos和y值= v1bar,v2bar,v3bar(所有三个将在连续的圆圈中).每个圆圈被分成chr.因此每个圆圈都有"饼图".我不确定这样的图表是什么,并且可以开发一个.以下只是粗略的草图来说明我的想法.

编辑:我的分歧与下面的马戏团形象相似.
http://circos.ca/tutorials/images/zoom/8.8
EDITS:
回应以下对大卫的回答,这就是我所想象的 - 这不是分开的,而是分类为不同的切片(如在马戏团的身影中)

Dav*_*son 12
由于您以循环方式呈现染色体,请尝试Bioconductor 提供的ecolitk包提供的工具,其中包括在圆形染色体上绘制各种形状的工具.
ETA:这是一个用于创建圆形条形图的示例,尽管它只是划分了您可以用它做的事情的表面.

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)
Run Code Online (Sandbox Code Playgroud)
ETA:啊,现在我明白你对地块划分的意义了.在这种情况下,此代码应该是您正在寻找的.它使用您提供的数据(稍微修改一下 - 我必须给染色体列命名,以便我可以使用ddply)并允许您指定染色体之间的间距.虽然我没有对其进行深入测试,但各种染色体长度以及模拟数据的均值和方差等变化应该如您所愿.

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)
Run Code Online (Sandbox Code Playgroud)