我的数据集是这样的:
`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 组的条形图大三倍,但一切正常。
`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)`
但我真正想要实现的是通过保持条形宽度不变,根据每个组具有的条形数量调整组大小的图。有什么办法吗?
期待您的帮助!
最佳答案
如果我对您的问题理解正确,您希望分配给“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")
关于r - ggplot 中的条形图,每组条数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101248/