我想绘制一个分组的条形图。我用于绘图的数据集非常大。以下是它的一小部分:
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 :(得分:4)
首先,我们将您的数据保存为data.frame
,其中包含两列label
和size
。
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)