2012-02-23 28 views
7

Sau đây là dữ liệu của tôi:overlayed nhiều barcharts Thông tư R

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) 

Tôi muốn tạo ra nhiều biểu đồ thanh tròn với giá trị x = pos và giá trị y = v1bar, v2bar, v3bar (cả ba sẽ trong vòng kết nối liên tiếp). Mỗi vòng tròn được chia thành chr. Vì vậy, mỗi vòng tròn có "miếng bánh". Tôi không chắc những gì đồ thị như vậy được biết đến như là và nó sẽ có thể phát triển một. Sau đây chỉ là phác thảo thô để minh họa ý tưởng của tôi.

enter image description here

Chỉnh sửa: assuption của tôi là cách nọ cách kia giống với con số circos sau.

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

CHỈNH SỬA:

Để đối phó với những câu trả lời sau đây để David, đây là những gì tôi đã tưởng tượng - chr không riêng biệt Circe nhưng phân loại lát như khác nhau (ví dụ như trong hình circos) enter image description here

+3

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/) –

+0

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ì? –

+0

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

Trả lời

12

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ó.

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: 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.

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

Nó không phải là nhiễm sắc thể tròn thay vì cách trình bày là hình tròn, cảm ơn cho chú thích – jon

+0

Nó không tạo ra sự khác biệt - bạn vẫn có thể sử dụng phần mềm theo cùng một cách. –

+0

Xin lỗi để nói nhưng tôi đã xem hướng dẫn (http://www.bioconductor.org/packages/release/bioc/manuals/ecolitk/man/ecolitk.pdf) và họa tiết (http://www.bioconductor.org/ gói/phát hành/bioc/vignettes/ecolitk/inst/doc/ecolitk.pdf), tôi không thể tìm thấy bất cứ điều gì tương tự như sofar. Tôi sẽ đánh giá cao nếu ai đó giúp đỡ để xác định vị trí nó .. cảm ơn – jon

0

OmicCircos tại R/Bioconductor có khả năng vẽ nhiều biểu đồ thanh tròn overlayed. Lệnh circos của OmicCircos lấy đối số, có tên là cir nơi bạn có thể chỉ định phân đoạn hoặc nhiễm sắc thể của bộ gen tùy chỉnh. Đối với biểu đồ thanh, nó có lý lẽ loại nơi bạn có thể chỉ định một trong những âm mưu thanh, âm mưu hộp, histogram vv

Kiểm tra Vignette R script - Mã đoạn số 14: OmicCircos4vignette1 để biết thêm.