2014-09-02 72 views
0

我有以下的示例數據集堆疊barplot類似條件密度

dump.stack<-structure(list(vanilla = c(16438L, 15877L, 16141L, 15490L, 15468L 
), berry = c(27235L, 26692L, 25964L, 25762L, 24961L), orange = c(15825L, 
16278L, 16413L, 16714L, 16881L), lemon = c(40502L, 41153L, 41482L, 
42034L, 42690L), age = c(20, 21, 22, 23, 24)), .Names = c("vanilla", 
"berry", "orange", "lemon", "age"), row.names = c(NA, -5L), class = "data.frame") 

對於每個age答案總數總結爲100000。我想在X軸與age到圖表此使用層疊barplot和Y軸中每種香料中個體的比例/百分比。

我試過barplot(as.matrix(dump.stack))沒有任何成功。我認爲barplotcdplot需要轉換數據,但我無法弄清楚。

我怎樣才能使用堆疊式氣壓槍?也有可能使用cdplot()來對此進行圖示(因爲統計上講,該圖將是條件密度)。

我會預先R基礎,但如果這是不可能的,我也會接受ggplot2解決方案。

回答

1

對於基R:

mm = melt(dump.stack, id='age') 
mm$percent = mm$value*100/100000 
mm=mm[,c(1,2,4)] 
barplot(with(mm3, tapply(value, list(variable,age), sum)), legend=TRUE) 

enter image description here

編輯:同樣的結果也可以用下面的代碼得到:

rownames(dump.stack)=dump.stack$age 
dump.stack = dump.stack[,-5] 
dump.stack = dump.stack/1000 
barplot(t(dump.stack), legend=TRUE) 
1

嘗試:

mm = melt(dump.stack, id='age') 
mm$percent = mm$value*100/100000 
library(ggplot2) 
ggplot(mm)+geom_bar(aes(x=age, y=percent, fill=variable), stat='identity') 

enter image description here

+0

感謝。你碰巧知道它是否可能與基地R或CDPlot? – ECII 2014-09-02 17:31:50

+0

@ECII:請參閱我在base r解決方案中的編輯。 – rnso 2014-09-03 01:32:56

1

關於您對cdplot(或其他基本策略)的區域圖的要求...只需使用數據元素的轉置。 cdplot的幫助頁面表示它類似於spineplotspineplot將其各列放入......呃,行中。

spineplot(t(dump.stack[-5])) 

enter image description here

我認爲它比barcharts的列的寬度信息的明顯的優勢。你也可以做進一步的轉置(保持輸入矩陣),並有每列是一個單獨的年齡(這可能是你在開始的時候想要什麼):

png(); spineplot(t(t(dump.stack[-5])), 
     xaxlabels=dump.stack[[5]], ylab="Preferences", xlab="Ages"); dev.off() 

enter image description here