2015-11-05 36 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