2012-09-17 23 views
8

thể trùng lặp:
How to overlay density plots in R?Làm cách nào để có được nhiều dòng trong một ô mật độ đơn lẻ, với thang đo được sửa?

Gần đây tôi đã bắt đầu làm việc với các tập dữ liệu microarray và đang cố gắng để có được bàn tay của tôi trên R. Tôi muốn thực hiện một số lô ra khỏi dữ liệu kết quả của tôi, nhưng tuy nhiên tôi bị mắc kẹt sau đây.

tôi có các dữ liệu sau (myData),

cpg samp1 samp2 samp3 
cpg1 0.43 0.32 0.21 
cpg2 0.43 0.22 1.00 
cpg3 0.11 0.99 0.78 
cpg4 0.65 0.32 0.12 
cpg5 0.11 0.43 0.89 

Và tôi muốn có được một âm mưu mật độ cho điều này,

tôi đã làm như sau,

plot (density(MyData$samp1), col="red") 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

Nhưng làm điều này không cung cấp cho tôi các ô chính xác, bởi vì không phải tất cả các đường cong mẫu đều phù hợp với giới hạn lô. Tôi đã cố gắng tìm kiếm câu trả lời, nhưng thành thật mà nói tôi vẫn không thể làm được điều này. Bạn có thể giúp tôi biết làm cách nào để đặt tỷ lệ của mình cho những điều trên không? Hoặc những gì tôi nên làm thêm vào mã trên, để tất cả các đường cong nằm trong phạm vi ?? Tôi đã có nhiều mẫu, vì vậy tôi cần một cái gì đó mà cũng có thể tự động gán một đường cong màu sắc khác nhau cho mỗi mẫu của tôi, sau khi mở rộng nó đúng.

Thanks in advance ..

+0

Câu trả lời cho câu hỏi có thể được tìm thấy trong các ý kiến ​​để trả lời chấp nhận trong đề xuất trùng lặp. – Dason

Trả lời

6

bạn sẽ cần phải thay đổi các giới hạn trục của cốt truyện gốc để phù hợp với tất cả mọi thứ trong này không được thực hiện cho bạn tự động khi thêm dòng khác nhau:.

ví dụ

plot (density(MyData$samp1), col="red",ylim=c(0,3.5),xlim=c(-1,2)) 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

enter image description here

+0

Có cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. – Letin

2

Bạn cũng có thể tạo ra các giới hạn của x và y trục tự động:

ranges <- apply(MyData, 2, 
      function(x) { dens <- density(x); c(range(dens$x), range(dens$y)) }) 

plot(density(MyData$samp1), col="red", 
     xlim = range(ranges[1:2, ]), ylim = range(ranges[3:4, ])) 
lines(density(MyData$samp2), col="green") 
lines(density(MyData$samp3), col="blue") 

densities

+0

Có sẽ làm việc trên nó .. nhờ bạn cũng giúp đỡ của bạn .. :) – Letin

+2

Một cách tiếp cận tự động hơn (sau khi tính toán phạm vi của bạn) có thể là một cái gì đó như: 'cốt truyện (0, type =" n ", xlim = range (phạm vi [1: 2,]), ylim = range (khoảng [3: 4,])); COL = cầu vồng (ncol (MyData)); lapply (1: (ncol (MyData)), hàm (x) dòng (mật độ (MyData [, x]), col = COL [x])) '. Nói cách khác, tạo một ô trống, sau đó sử dụng 'lapply' để vẽ' các dòng' trên ô trống này. – A5C1D2H2I1M1N2O1R2T1

+0

+1 Ý tưởng hay, @mrdwab –

4

Sử dụng gói lattice (Tôi chắc chắn một Ví dụ: ggplot2 không xa), bạn có thể sử dụng hàm densityplot:

library(lattice) 
densityplot(~ samp1 + samp2 + samp3, data = myData, auto.key = TRUE) 

enter image description here

Hoặc sử dụng gói reshape2 để có được dữ liệu của bạn vào một hình thức cao trước âm mưu:

library(reshape2) 

myDataM<-melt(myData) 

densityplot(~ value, groups = variable, data = myDataM, auto.key = TRUE) 
+0

có điều này sẽ tốt, vì vậy mà tôi cũng có màu sắc tự động .. Cảm ơn bạn :) – Letin

Các vấn đề liên quan