在R程序中生成分组条形图,每组的条形数不均匀

时间:2015-11-05 06:32:16

标签: r plot bar-chart

我想绘制一个分组的条形图。我用于绘图的数据集非常大。以下是它的一小部分:

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的小节,依此类推。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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