如何在R中绘制分组和堆叠的子集图

时间:2015-09-24 08:49:30

标签: r ggplot2

我有一个包含数据的文件,如下所示:

  test  <- data.frame(Group=c("A", "B", "C", "D", "E"), 
                value1=c(100,150,120,80,150),     
                value2=c(25,30,45,30,30) , 
                value3=c(100,120,150,150,200),
                value4=c(30,45,65,45,30)) 

我想为每个'Group'创建一个分组的条形图,其中value1和value2堆叠成1 bar,value3和value 4堆叠到另一个bar中。

P:S:Value2应该是value1的子集,Value4应该是条形中value3的子集。

可能在R.

2 个答案:

答案 0 :(得分:2)

我们需要先进行一些数据重塑,因为每个点都需要与它自己的行相关联的信息。

library(reshape2)
library(ggplot2)
m_test <- melt(test,id.var="Group")

#generate a grouping variable to separate the two bars.
#currently done by comparing variable names.
m_test$subvar <- as.numeric(m_test$variable %in% c("value3","value4"))

test2 <- dcast(Group+subvar+variable~"value",value.var="value",data=m_test)
#reverse for proper plotting
test2 <- test2[rev(order(test2$variable)),]
> head(test2)
   Group subvar variable value
20     E      1   value4    30
16     D      1   value4    45
12     C      1   value4    65
8      B      1   value4    45
4      A      1   value4    30
19     E      1   value3   200

然后我们可以这样绘制:

p1 <- ggplot(test2, aes(x=interaction(subvar,Group),y=value,fill=variable))+
  geom_bar(stat="identity")
p1

enter image description here

或使用方面:

p2 <- ggplot(test2, aes(x=factor(subvar),y=value, fill=variable))+
  geom_bar(stat="identity")+facet_grid(.~Group)
p2

enter image description here

答案 1 :(得分:0)

我发现我需要重新编写输入数据,如下所示,

test  <- data.frame(Group=c("A", "B", "C", "D", "E"), 
                    value1=c(100,150,120,80,150),     
                    value2=c(25,30,45,30,30) , 
                    value3=c(100,120,150,150,200),
                    value4=c(30,45,65,45,30), stringsAsFactors=F)

请注意stringsAsFactors = F参数。

我从下面得到了你想要的东西,

barplot(as.matrix(t(test[,-1])), names.arg=test[,1])

你需要玩弄颜色和标签。