ggplot:多列值的Boxplot

时间:2013-02-09 06:16:30

标签: r ggplot2

以下是我作为csv文件导入的数据类型:

RPID    mm  ID  Time    Freq    Freq.1  Freq.2
RPO483  1   B6AC    5   23301   30512   
RPO483  1   B6AC    25  19      17  
RPO244  1   B6C     5   14889   20461   
RPO244  1   B6C     25  81      86  
RPO876  1   G3G3A   5   106760  59950   103745
RPO876  1   G3G3A   25  4578    38119   37201
RPO876  7   F3G3A   5   205803  148469  173580
RPO876  7   F3G3A   25  28648   30321   26454
RPO939  7   F3E324A 5   242285      
RPO939  7   F3E324A 25  42837       
RPO934  7   F3E325A 5   242001  129272  112371
RPO934  7   F3E325A 25  73057   58685   66582

对于每个“ID”,我想为“Freq”,“Freq.1”和“Freq.2”列中的值生成一个箱形图。但是,目前我只能成功绘制一个Y值 - 例如:

dataset <- read.csv("~/R/dataset.csv")
library(ggplot2)
p <- ggplot(dataset) 
p + geom_boxplot(aes(x=ID, y=Freq, color=mm))

我尝试了类似y = c(Freq,Freq.1,Freq.2)的内容,但结果如下:

Error: Aesthetics must either be length one, or the same length as the dataProblems:ID

我确信这有一个简单的解决方案,但由于我对R很新,我无法分辨 如果这是一个错误的数据格式,错误的语法,错误的包或完全不同的问题。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:17)

您需要重新整形数据才能进行绘图。

首先我读了你的数据。请注意,您有一些 NA 值。

dat <- read.table(text = '
RPID    mm  ID  Time    Freq    Freq.1  Freq.2
RPO483  1   B6AC    5   23301   30512   
RPO483  1   B6AC    25  19      17  
RPO244  1   B6C     5   14889   20461   
RPO244  1   B6C     25  81      86  
RPO876  1   G3G3A   5   106760  59950   103745
RPO876  1   G3G3A   25  4578    38119   37201
RPO876  7   F3G3A   5   205803  148469  173580
RPO876  7   F3G3A   25  28648   30321   26454
RPO939  7   F3E324A 5   242285      
RPO939  7   F3E324A 25  42837       
RPO934  7   F3E325A 5   242001  129272  112371
RPO934  7   F3E325A 25  73057   58685   66582',head=T, fill=T)

使用reshape2例如

library(reshape2)
dat.m <- melt(dat,id.vars='ID', measure.vars=c('Freq','Freq.1','Freq.2'))
library(ggplot2)
p <- ggplot(dat.m) +
      geom_boxplot(aes(x=ID, y=value, color=variable))

enter image description here