[英]Stacked barplot similar to conditional density
我有以下示例數據集
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
,Y軸為每種口味的個體比例/百分比。
我嘗試了barplot(as.matrix(dump.stack))
但沒有成功。 我開始認為barplot
和cdplot
需要對數據進行轉換,但是我不知道該怎么做。
我該如何使用堆疊式Barpot? 也可以使用cdplot()
對此圖形化(因為從統計學上講,該圖形將是條件密度)。
我會預付基數R,但是如果不可能的話,我也會接受ggplot2解決方案。
嘗試:
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')
對於基數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)
編輯:也可以使用以下代碼獲得相同的結果:
rownames(dump.stack)=dump.stack$age
dump.stack = dump.stack[,-5]
dump.stack = dump.stack/1000
barplot(t(dump.stack), legend=TRUE)
關於您使用cdplot
(或其他基本策略)對區域圖的請求...只需使用數據元素的轉置即可。 cdplot
的幫助頁面說它類似於spineplot
。 spineplot
將其單獨的列排成.... er行。
spineplot(t(dump.stack[-5]))
我認為它的寬度比信息圖表具有明顯的優勢,比條形圖更具優勢。 您還可以進行進一步的轉置(以使輸入保持矩陣形式),並使每一列都是一個單獨的年齡(這可能是一開始您想要的):
png(); spineplot(t(t(dump.stack[-5])),
xaxlabels=dump.stack[[5]], ylab="Preferences", xlab="Ages"); dev.off()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.