ggplot中的条形图,每组有不同数量的条形图

时间:2012-02-01 18:32:48

标签: r ggplot2

我的数据集如下所示:

`DSET<-data.frame(cbind(c(rep("V1",3),rep("V2",3),"V3"),
                       c(rep(c("X1","X2","X3"),2),"X1"),
                       c(rep(1,7))))`    
`names(DSET)<-c("A","B","C")`    
`DSET[,3]<-c(1,-2,1,3,-1,2,-3)` 

有三个分组变量(V1,V2,V3)和每组三个变量(X1,X2,X3)。问题是第3组(V3)只有一个变量(X1)但缺少另外两个变量。如果我想制作一个条形图,现在,尽管第3组的条形图比第1组和第2组的条形图大3倍,但一切正常。

`Grph<-ggplot(DSET,aes(x=A,y=C,fill=B))`    
`dodge <- position_dodge(width=0.9)`    
`Grph+geom_bar(position=dodge)` 

我尝试添加缺少组的两行,X2和X3的值为0,并且它有点工作。

`DSET<-data.frame(cbind(c(rep("V1",3),rep("V2",3),rep("V3",3)),
                       c(rep(c("X1","X2","X3"),3)),c(rep(1,9))))`    
`names(DSET)<-c("A","B","C")`    
`DSET[,3]<-c(1,-2,1,3,-1,2,-3,0,0)` 

`Grph<- ggplot(DSET,aes(x=A,y=C,fill=B))`    
`dodge <- position_dodge(width=0.9)`    
`Grph+geom_bar(position=dodge)` 

但我真正希望实现的是一个图表,通过保持条形宽度不变,根据每个组的条数来调整组大小。有没有办法做到这一点?

期待您的帮助!

1 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,你希望分配给“V3”的空间量小于分配给“V1”和“V2”的空间,因为“V3”中只有一个“X”,并且你想要代表“X”的每个条的宽度是一样的吗?如果是这样,您可以使用构面获得此结果,但不能使用简单的x刻度。

首先,一种更简单的方法来创建两个数据框(并赋予它们不同的名称):

DSET <- data.frame(A=c(rep("V1",3),rep("V2",3),"V3"),
                   B=c(rep(c("X1","X2","X3"),2),"X1"),
                   C=c(1,-2,1,3,-1,2,-3))

DSET2 <- data.frame(A=rep(c("V1","V2","V3"), each=3),
                    B=rep(c("X1","X2","X3"), times=3),
                    C=c(1,-2,1,3,-1,2,-3,0,0))

你的两张图:

Grph <- ggplot(DSET, aes(x=A, y=C, fill=B)) +
  geom_bar(position=position_dodge(width=0.9))
Grph

enter image description here

Grph %+% DSET2

enter image description here

要使用构面获得所需内容,请使用:

ggplot(DSET, aes(x=B, y=C, fill=B)) +
  geom_bar(position=position_dodge(width=0.9)) +
  facet_grid(.~A, scale="free_x", space="free")

enter image description here