根据former question的回答,我又提出了一个问题:
如果不重塑数据,如何根据另一个类别绘制不同颜色的堆积条形图,同时使用stats =“identity”来总结每个堆积区域的值?
stats身份很好地总结了值,但是对于非堆叠列。在堆叠列中,堆叠以某种方式“倍增”或“条纹”,见下图。
一些数据样本:
element <- rep("apples", 15)
qty <- c(2, 1, 4, 3, 6, 2, 1, 4, 3, 6, 2, 1, 4, 3, 6)
category1 <- c("Red", "Green", "Red", "Green", "Yellow")
category2 <- c("small","big","big","small","small")
d <- data.frame(element=element, qty=qty, category1=category1, category2=category2)
给出了该表:
id element qty category1 category2
1 apples 2 Red small
2 apples 1 Green big
3 apples 4 Red big
4 apples 3 Green small
5 apples 6 Yellow small
6 apples 2 Red small
7 apples 1 Green big
8 apples 4 Red big
9 apples 3 Green small
10 apples 6 Yellow small
11 apples 2 Red small
12 apples 1 Green big
13 apples 4 Red big
14 apples 3 Green small
15 apples 6 Yellow small
然后:
ggplot(d,aes(x = category1,y = qty,fill = category2))+ geom_bar(stat =“identity”)
但是图表有点混乱:颜色没有组合在一起!
为什么会出现这种行为?
是否仍然可以选择正确分组颜色而不重塑数据?
答案 0 :(得分:2)
一种方法是按category2
订购数据。这也可以在ggplot()
调用中完成。
ggplot(d[order(d$category2),], aes(x=category1, y=qty, fill=category2)) +
geom_bar(stat="identity")
答案 1 :(得分:1)
我正在使用这个解决方案,但它发生在我的大型数据库(60 000个条目)上,有序堆叠条形图ggplot2正在绘制,这取决于缩放级别,条形图之间的一些空白区域。不知道这个问题来自哪里 - 但一个疯狂的猜测是我堆叠了太多的酒吧:p。
使用plyr聚合数据解决了问题:
element <- rep("apples", 15)
qty <- c(2, 1, 4, 3, 6, 2, 1, 4, 3, 6, 2, 1, 4, 3, 6, )
category1 <- c("Red", "Green", "Red", "Green", "Yellow")
category2 <- c("small","big","big","small","small")
d <- data.frame(element=element, qty=qty, category1=category1, category2=category2)
plyr:
d <- ddply(d, .(category1, category2), summarize, qty=sum(qty, na.rm = TRUE))
简要说明这个公式的内容:
ddply(1, .(2, 3), summarize, 4=function(6, na.rm = TRUE))
1:数据帧名称 2,3:要保留的列 - &gt;用于计算的分组因子 总结:创建一个新的数据帧(与转换不同) 4:计算列的名称 function:要应用的函数 - 这里是sum() 6:要应用函数的列
4,5,6可以重复计算更多的字段...
ggplot2: ggplot(d,aes(x = category1,y = qty,fill = category2))+ geom_bar(stat =“identity”)
现在,正如RomanLuštrik所建议的那样,根据要显示的图表汇总数据。
在应用ddply后,确实数据更清晰:
category1 category2 qty
1 Green big 3
2 Green small 9
3 Red big 12
4 Red small 6
5 Yellow small 18
由于这个非常好的信息来源,我终于明白了如何管理我的数据集: http://jaredknowles.com/r-bootcamp https://dl.dropbox.com/u/1811289/RBootcamp/slides/Tutorial3_DataSort.html
那个也是: http://streaming.stat.iastate.edu/workshops/r-intro/lectures/6-advancedmanipulation.pdf
...只是因为?ddply有点......奇怪(例子与选项的解释不同) - 看起来没有什么告诉写简写...但我可能错过了一点......