2013-02-13 110 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