Vì bạn đang trình bày nhiễm sắc thể theo cách hình tròn, hãy thử các công cụ được cung cấp bởi gói ecolitk do Bioconductor cung cấp, bao gồm các công cụ để vẽ các loại hình dạng khác nhau trên các nhiễm sắc thể hình tròn.
ETA: Đây là một ví dụ về cách sử dụng nó để tạo thành một thanh hình tròn, mặc dù nó chỉ làm xước bề mặt của những thứ bạn có thể làm với nó.
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: Ah, bây giờ tôi hiểu những gì bạn có nghĩa là về phân chia lô. Trong trường hợp đó, mã này phải là những gì bạn đang tìm kiếm. Nó sử dụng dữ liệu bạn trình bày (với một sửa đổi nhỏ-tôi đã phải cung cấp cho các cột nhiễm sắc thể một tên vì vậy tôi có thể sử dụng ddply với nó) và cho phép bạn chỉ định khoảng cách giữa các nhiễm sắc thể. Trong khi tôi đã không thử nghiệm nó sâu, những thứ khác nhau như độ dài nhiễm sắc thể cá nhân và trung bình và phương sai của dữ liệu mô phỏng sẽ hoạt động như bạn mong đợi.
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)
rblogger có biểu đồ tương tự (biểu đồ) được thảo luận vào đầu tuần này [BẤM VÀO ĐÂY] (http://www.r-bloggers.com/polar-histogram-pretty-and-useful/) –
Cụ thể bạn muốn bao gồm từ các con số circos rằng câu trả lời của tôi, ví dụ, không làm gì? –
Con số của bạn tất cả các tính năng trừ (1) chr là vòng tròn khác nhau (thay vì var) - mà obivously có thể thay đổi một cách dễ dàng (2) Chr là riêng biệt lát bánh ngoài var trong vòng tròn khác nhau - circos hình có tài sản này – jon