我的数据集如下所示:
`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)`
但我真正希望实现的是一个图表,通过保持条形宽度不变,根据每个组的条数来调整组大小。有没有办法做到这一点?
期待您的帮助!答案 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
Grph %+% DSET2
要使用构面获得所需内容,请使用:
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")