2013-08-06 14 views
9

創造R.柱狀圖時,我遇到了一個小問題柱狀圖中有3個變量:R:兩組,其中一個是疊

a <- c(3,3,2,1,0) 
b <- c(3,2,2,2,2) 
c <- 0:4 

的柱狀圖中應進行分組'a'和'c','b'應該堆疊在'a'的頂部。單獨進行分組和堆疊很簡單:

barplot(rbind(a,c), beside=TRUE) 
barplot(rbind(a,b), beside=FALSE) 

如何在一張圖中同時執行這兩個操作?

+0

也許這將有助於:http://stackoverflow.com/questions/1801064/how-to-separate-two-plots-in-r –

回答

10

這樣做需要思考如何barplot繪製堆疊條形。基本上,你需要在適當的地方給它提供一些0值的數據。與您的數據:

mydat <- cbind(rbind(a,b,0),rbind(0,0,c))[,c(1,6,2,7,3,8,4,9,5,10)] 
barplot(mydat,space=c(.75,.25)) 

barplot

要看看有什麼引擎蓋下回事,看看mydat

> mydat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
a 3 0 3 0 2 0 1 0 0  0 
b 3 0 2 0 2 0 2 0 2  0 
    0 0 0 1 0 2 0 3 0  4 

在這裏,你有三個值繪製各條(值爲a,值爲b,值爲c)。 mydat矩陣的每列都是一個條,按照ab條適當地與c條散佈的方式進行排序。你可能想要玩弄間距和顏色。

顯然這個版本已經在R-幫助varioustimeswithoutgreatsolutions討論,所以希望這是有幫助的。

+0

+1非常非常好地完成! – Arun

+0

是的,這正是我想要的。謝謝。你有什麼機會讓我看到相同的ggplot? – Forzaa

+0

@Forzaa我其實不使用ggplot,所以我不能在那裏得到任何幫助。 – Thomas

0

嘗試lattice LIB:

library("lattice") 
MyData <- as.data.frame(Titanic) 

barchart(Freq ~ Survived | Age * Sex, groups = Class, data = MyData, 
     auto.key = list(points = FALSE, rectangles = TRUE, space 
     = "right", title = "Class", border = TRUE), xlab = "Survived", 
     ylim = c(0, 800)) 

output

正如你所看到的分組和ploting是在做一次。

另請參閱:https://stat.ethz.ch/pipermail/r-help/2004-June/053216.html

+0

在這個例子中沒有堆疊在彼此之上,所以它沒有真正實現我的目標。 – Forzaa