2013-02-13 86 views
1

我有379838行和列13個變量(13個臨牀樣本)的數據幀變量:如何分配顏色子集的GGPLOT2

> str(df) 
'data.frame': 379838 obs. of 13 variables: 
    $ V1 : num 0.8146 0.7433 0.0174 0.177 0 ... 
$ V2 : num 0.7465 0.5833 0.0848 0.5899 0.0161 ... 
$ V3 : num 0.788 0.843 0.333 0.801 0.156 ... 
$ V4 : num 0.601 0.958 0.319 0.807 0.429 ... 
$ V5 : num 0.792 0.49 0.341 0.865 1 ... 
$ V6 : num 0.676 0.801 0.229 0.822 0.282 ... 
$ V7 : num 0.783 0.732 0.223 0.653 0.507 ... 
$ V8 : num 0.69 0.773 0.108 0.69 0.16 ... 
$ V9 : num 0.4014 0.5959 0.0551 0.7578 0.2784 ... 
$ V10: num 0.703 0.784 0.131 0.698 0.204 ... 
$ V11: num 0.6731 0.8224 0.125 0.6021 0.0772 ... 
$ V12: num 0.7889 0.7907 0.0881 0.7175 0.2392 ... 
$ V13: num 0.6731 0.8221 0.0341 0.4059 0 ... 

,我試圖做一個GGPLOT2箱線圖分組變量分爲三組:V1-V5,V6-V9和V10-V13,併爲每組變量分配不同的顏色。

我想下面的代碼:

df1= as.vector(df[, c("V1", "V2", "V3","V4", "V5")]) 
    df2= as.vector(df[, c("V6","V7", "V8","V9")]) 
    df3=as.vector(df[, c("V10","V11", "V12","V13")]) 
    sample= c(df1,df2,df3) 

    library(reshape2) 

    meltData1 <- melt(df, varnames="sample") 

    str(meltData1) 
'data.frame': 4937894 obs. of 2 variables: 
    $ variable: Factor w/ 13 levels "V1","V2","V3",..: 1 1 1 1 1 1 1 1 1 1 ... 
    $ value : num 0.8146 0.7433 0.0174 0.177 0 ... 

    p=ggplot(data=meltData1,aes(variable,value, fill=x$sample)) 
    p+geom_boxplot() 

這給了我白箱線圖。我如何將顏色分配給三組變量?提前謝謝了!

+0

歡迎來到SO!在您的問題中添加數據樣本可能很有用。例如,你可以使用'dput(head(df))'。 – juba 2013-02-13 17:38:09

回答

3

由於未提供樣本數據,因此製作了新的數據框,其中包含13列,名稱從V1V13

df<-as.data.frame(matrix(rnorm(1300),ncol=13)) 

隨着從庫reshape2數據功能melt()從寬轉化爲長格式。現在數據幀有兩列:variablevalue

library(reshape2) 
dflong<-melt(df) 

添加到長格式新列sample。這裏我根據原始數據幀中的行數和每個組中原始列的數量重複命名爲group1,group2,group3

dflong$sample<-c(rep("group1",nrow(df)*5),rep("group2",nrow(df)*4),rep("group3",nrow(df)*4)) 

新列用於與參數fill=根據分組來設置顏色。

library(ggplot2) 
ggplot(data=dflong,aes(variable,value, fill=sample))+geom_boxplot() 

enter image description here

+3

(+1)如果在第一行中將'data.frame(。)'更改爲'as.data.frame(。)',則不必使用'colnames'設置列名。 – Arun 2013-02-13 17:48:53

+0

@Arun(+1)不知道data.frame()和as.data.frame()之間的區別。 – 2013-02-13 17:51:08

+1

當然,np。如果你在R終端輸入'as.data.frame.matrix',你會看到'names(value)< - paste0(「V」,ic)'已經明確設置。但是如果你鍵入'data.frame',那麼你會看到'row.names'被複制回來(只是爲了說明原因)。 – Arun 2013-02-13 17:54:53

2

這是一個後續Didzis Elferts。

目標:將樣本分成3個顏色組,其顏色組內的色調不同。

代碼的第一部分是相同的:

df<-as.data.frame(matrix(rnorm(1300),ncol=13)) 
library(reshape2) 
dflong<-melt(df) 
dflong$sample<-c(rep("group1",nrow(df)*5),rep("group2",nrow(df)*4),rep("group3",nrow(df)*4)) 
library(ggplot2) 

現在,使用包RColorBrewer選擇顏色深淺

library(RColorBrewer) 

顏色類創建的顏色列表

col.g <- c(brewer.pal(9,"Greens"))[5:9] # select 5 colors from class Greens 
col.r <- c(brewer.pal(9,"Reds"))[6:9] # select 4 colors from class Reds 
col.b <- c(brewer.pal(9,"Blues"))[6:9] # select 4 colors from class Blues 
my.cols <- c(col.g,col.r,col.b) 

看看你選的顏色:

image(1:13,1,as.matrix(1:13), col=my.cols, xlab="my palette", ylab="", xaxt="n", yaxt="n", bty="n") 

現在用色彩繪製我們已經創建

ggplot(data=dflong,aes(variable,value,colour=variable))+geom_boxplot()+scale_colour_manual(values = my.cols) 

在上面,用顏色和scale_colour_manual命令,只有線着色。下面,我們用填充和scale_fill_manual:

ggplot(data=dflong,aes(variable,value,fill=variable))+geom_boxplot()+scale_fill_manual(values = my.cols) 

Here's an example of what I'm looking for

附:我是一個全新手,並且自己學習R。我認爲這個問題是一個應用我剛剛學到的東西的機會。

+0

太棒了,帕特里克,非常感謝你!我主要的頭痛是用rep命令對變量進行分組...... – 2013-02-14 10:44:20