r - 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 组的条形图比第 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")

https://stackoverflow.com/questions/9101248/

相关文章:

cuda - 在 Cmake 项目中指定 openmp CUDA 标志

google-chrome - 使用 TFS/NUnit 通过构建过程执行时,使用 Google C

php - php中var-export函数的反义词是什么?

mysql - 导入mysql数据中断,如何恢复?

ruby-on-rails - 如何从 Rails 中的模型继承,其中一种类型在不交织的情况下扩展另

rest - 强制 web api 消费者接受响应中的新字段

python - subprocess.Popen 不是线程安全的?

.net - 如何设置 "user cannot change password"AD属性

c# - 在 IIS 服务器上发布 C# 控制台应用程序

sql - 查找某个点之后或之前的值