堆积的条形图类似于条件密度

时间:2014-09-02 17:09:50

标签: r graph plot ggplot2

我有以下示例数据集

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需要对数据进行转换,但我无法确定如何。

如何使用堆叠的火炮来做到这一点?也可以使用cdplot()来绘制图形(因为从统计上讲,图形将是条件密度)。

我会支持R,但如果不可能,我也会接受ggplot2解决方案。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分:1)

关于您对cdplot(或其他基本策略)的区域图的请求...只需使用数据元素的转置。 cdplot的帮助页面显示它与spineplot类似。 spineplot将各个列放在......呃,行中。

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

enter image description here

我认为它比条形图具有明显的优势,即列的宽度是提供信息的。您还可以进行进一步转置(以保持输入矩阵)并使每列成为一个单独的年龄(可能是您在开始时想要的):

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

enter image description here