2013-01-31 23 views
13

創建多個密度圖我在飛行中創建了以下數據:如何使用「小」在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) 

我想要做的就是像下面的草圖一個面板可以創建多條曲線使用'facet'。 我該怎麼辦?

enter image description here

+0

是。上圖僅僅是一個簡圖,並不能肯定地反映真實的數據。 – neversaint

+2

+1美麗的草圖。 – zx8754

+7

@neversaint您是手動創建這些草圖還是使用某種軟件工具? –

回答

19

你得先準備數據。我已經在你的data.frame df上說明了這一點,因爲它是一個適當的正態分佈。

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

做同樣的用df_log更換df你會得到這樣的事情:

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

你是真正的救星! – neversaint