簡體   English   中英

類似於條件密度的堆積條形圖

[英]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))但沒有成功。 我開始認為barplotcdplot需要對數據進行轉換,但是我不知道該怎么做。

我該如何使用堆疊式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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM