2015-11-05 72 views
0

我想绘制分组条形图。我用于绘图的数据集非常大。这里是它的一小部分:在R程序中生成分组条形图,每组的条数不均

Label size 
x  2 3 4 5 
y  2 6 8 
z  1 6 8 
a  2 2 
b  4 7 9 10 11 
c  8 12 

我想绘制条形图中,X轴会有标签,并在y轴上会有给出多个大小酒吧。

例如,在这里,x的尺寸为2 3 4 5。所以会有四个高度为2,3,4和5的棒。然后y的尺寸为2 6 8。所以会有3个大小为2,6和8的酒吧,依此类推。

任何人都可以帮我吗?

+0

请分享你的数据在一个可重复的格式,比如'dput(droplevels(头(MYDATA)))'。 – Gregor

+0

dput的输出是:结构(列表(标签=结构(c(4L,5L,6L,1L,2L,3L),。标签= c(“a”, “b”,“c”,“x (“1”,“1”,“1”,“1”,“ 2 2“,”2 3 4 5“, ”2 6 8“,”4 7 9 10 11“,”8 12“),class =”factor“)),.Name = c(”Label“, “size”),row.names = c(NA,6L),class =“data.frame”) –

回答

4

首先让我们将您的数据保存为data.frame,其中包含两列labelsize

mydata <- read.table(textConnection(' 
label\tsize 
x\t2 3 4 5 
y\t2 6 8 
z\t1 6 8 
a\t2 2 
b\t4 7 9 10 11 
c\t8 12 
'),header=TRUE,sep="\t") 

显示它在R,

> mydata 
    label  size 
1  x  2 3 4 5 
2  y  2 6 8 
3  z  1 6 8 
4  a   2 2 
5  b 4 7 9 10 11 
6  c  8 12 

然后是棘手的部分。我们将size的每个单独值保存在一个矩阵中,并用NA填充较短的行。这受到this post的启发。

mylist <- strsplit(as.character(mydata[,"size"])," ") 
n <- max(sapply(mylist, length)) 
mymatrix <- apply(do.call(rbind, lapply(mylist, `[`, seq_len(n))),1,as.numeric) 

矩阵的样子,

> mymatrix 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 2 2 1 2 4 8 
[2,] 3 6 6 2 7 12 
[3,] 4 8 8 NA 9 NA 
[4,] 5 NA NA NA 10 NA 
[5,] NA NA NA NA 11 NA 

最后,我们准备做的情节!

barplot(
    mymatrix, beside=TRUE, 
    col=1:n, 
    names.arg=mydata$label) 

enter image description here