我有一个包含数据的文件,如下所示:
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.
答案 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
或使用方面:
p2 <- ggplot(test2, aes(x=factor(subvar),y=value, fill=variable))+
geom_bar(stat="identity")+facet_grid(.~Group)
p2
答案 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])
你需要玩弄颜色和标签。