2013-01-31 34 views
13

tôi có các dữ liệu sau tạo ra một cách nhanh chóng:Làm thế nào để sử dụng 'khía cạnh' để tạo nhiều âm mưu mật độ trong GGPLOT

> df <- data.frame(cbind(rnorm(200),rnorm(200, mean=.8),rnorm(200, mean=.9),rnorm(200, mean=1),rnorm(200, mean=.2),rnorm(200, mean=.3)),rnorm(200, mean=4),rnorm(200, mean=.5)) 
> colnames(df) <- c("w.cancer","w.normal","x.cancer","x.normal","y.cancer","y.normal","z.cancer","z.normal") 
> df_log<-log2(df) # ignore the warning with NA 
> head(df_log) 

Những gì tôi muốn làm là để tạo ra nhiều âm mưu trên một bảng như phác họa dưới đây sử dụng 'facet'. Tôi có thể làm gì?

enter image description here

+0

Yes. Hình trên chỉ là một phác thảo và nó sẽ không phản ánh dữ liệu thực sự chắc chắn. – neversaint

+2

+1 Bản phác thảo đẹp. – zx8754

+7

@neversaint bạn đã tạo các bản phác thảo này bằng tay hay sử dụng một loại công cụ phần mềm nào? –

Trả lời

19

Bạn sẽ phải chuẩn bị dữ liệu trước tiên. Tôi đã minh họa điều này trên số data.frame df vì đây là phân phối bình thường thích hợp.

require(ggplot2) 
require(reshape2) 
df$id <- 1:nrow(df) 

df.m <- melt(df, "id") 
df.m$grp1 <- factor(gsub("\\..*$", "", df.m$variable)) 
df.m$grp2 <- factor(gsub(".*\\.", "", df.m$variable)) 

p <- ggplot(data = df.m, aes(x=value)) + geom_density(aes(fill=grp2), alpha = 0.4) 
p <- p + facet_wrap(~ grp1) 
p + scale_fill_brewer(palette = "Set1") 

ggplot2_facet_example

Làm tương tự bằng cách thay thế df với df_log bạn muốn nhận được một cái gì đó như thế này:

require(ggplot2) 
require(reshape2) 
df_log$id <- 1:nrow(df_log) 

df.m <- melt(df_log, "id") 
df.m$grp1 <- factor(gsub("\\..*$", "", df.m$variable)) 
df.m$grp2 <- factor(gsub(".*\\.", "", df.m$variable)) 

p <- ggplot(data = df.m, aes(x=value)) + geom_density(aes(fill=grp2), alpha = 0.5) 
p <- p + facet_wrap(~ grp1) 
p 

ggplog2_facet_log

+2

bạn thực sự là người tiết kiệm cuộc sống! – neversaint

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