2012-02-01 118 views
2

我的数据集是这样的:条形图中ggplot与不同数量的酒吧每组

`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组的栏比第一组和第二组的栏大三倍。

`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)` 

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

期待您的帮助!

回答

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

+0

谢谢布赖恩!我实际上在使用facet_grids之前尝试过使用aes(x = A,y = C,fill = B),它给出了与第一个图形相同的结果。但现在它起作用了,太棒了!你也知道如何使用geom_abline在x = 0 w/o处绘制一条线吗? geom_abline将线条略微拉高,使其看起来很奇怪,特别是在我的真实图形中,我有误差条,直到x = 0。 – Latrunculia 2012-02-02 09:34:45

+0

我解决了它:我必须指定斜率和截距而不是x = 0。不过,我想知道它会发生什么变化。 Ps .:顺便说一句 - 感谢您的代码编辑! – Latrunculia 2012-02-02 09:44:42

+0

你也可以考虑'geom_hline(yintercept = 0)'为水平线。 – 2012-02-02 16:23:10

相关问题