在R程序中生成分组条形图,每组的条数不均
问题描述:
我想绘制分组条形图。我用于绘图的数据集非常大。这里是它的一小部分:在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的酒吧,依此类推。
任何人都可以帮我吗?
答
首先让我们将您的数据保存为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)
请分享你的数据在一个可重复的格式,比如'dput(droplevels(头(MYDATA)))'。 – Gregor
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”) –