R ggplot2统计数据=";“身份”;而在条形图中叠加颜色则给出;条纹的;条形图

R ggplot2统计数据=";“身份”;而在条形图中叠加颜色则给出;条纹的;条形图,r,ggplot2,R,Ggplot2,在回答我的问题之后,我提出了另一个问题: 如何在不重塑数据的情况下,根据另一个类别以不同颜色绘制堆叠条形图,同时使用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 &l

在回答我的问题之后,我提出了另一个问题:

如何在不重塑数据的情况下,根据另一个类别以不同颜色绘制堆叠条形图,同时使用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)
然后:
ggplot(d,aes(x=类别1,y=数量,fill=类别2))+geom_bar(stat=“identity”)

但是图表有点混乱:颜色没有组合在一起

为什么会有这种行为


是否仍有一个选项可以在不重塑数据的情况下正确分组颜色

一种方法是按
类别2
对数据进行排序。这也可以在
ggplot()调用中完成

ggplot(d[order(d$category2),], aes(x=category1, y=qty, fill=category2)) + 
             geom_bar(stat="identity")

我曾经使用过这个解决方案,但碰巧在我的大型数据库(60000个条目)上,有序的堆叠条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)
1:数据帧名称 2,3:要保留的列->要进行计算的分组因子 概述:创建新的数据帧(与转换不同) 4:计算列的名称 函数:要应用的函数-这里是sum() 6:应用函数的列

4、5、6可重复计算更多字段

GG2: ggplot(d,aes(x=类别1,y=数量,fill=类别2))+geom_bar(stat=“identity”)

现在,正如罗曼·卢什特里克(Roman Luš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
我终于了解了如何管理我的数据集,因为这是一个非常棒的信息源:

还有那个:


。。。就因为?ddply有点。。。奇怪(示例不同于选项的解释)-看起来没有关于速记的说明。。。但我可能遗漏了一点…

为什么重塑是不可能的
stat=identity
只会画出你给它的东西。在您的例子中,是一个混乱的数据集。您必须手动处理该表以获得所需的结果(我不知道它应该是什么样子)。我尝试将最轻的代码嵌入到php编码的插件中,以包含在网站(tikiwiki CMS)中,这样非R-Wiki用户仍然可以根据其数据自定义一些统计数据。另外,由于一个页面中可能有许多插件,我希望保持服务器用于显示低统计数据。。。也就是说,重塑并不是不可能的:)
d <- ddply(d, .(category1, category2), summarize, qty=sum(qty, na.rm = TRUE))
ddply(1, .(2, 3), summarize, 4=function(6, na.rm = TRUE))
  category1 category2 qty
1     Green       big   3
2     Green     small   9
3       Red       big  12
4       Red     small   6
5    Yellow     small  18