Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 分组条形图:顺序x轴&;保持恒定的条形宽度,以防缺少标高_R_Svg_Ggplot2_Bar Chart - Fatal编程技术网

R 分组条形图:顺序x轴&;保持恒定的条形宽度,以防缺少标高

R 分组条形图:顺序x轴&;保持恒定的条形宽度,以防缺少标高,r,svg,ggplot2,bar-chart,R,Svg,Ggplot2,Bar Chart,以下是我的脚本(示例灵感来自并使用了来自的reorder选项): 库(ggplot2) 动物为了达到这样的效果,我会在使用ggplot时调整数据帧。添加值为零的缺失类别 Animals <- rbind(Animals, data.frame(Category = c("Improved", "Decline"), Reason = c("Hello", "Bla"),

以下是我的脚本(示例灵感来自并使用了来自的
reorder
选项):

库(ggplot2)

动物为了达到这样的效果,我会在使用ggplot时调整数据帧。添加值为零的缺失类别

Animals <- rbind(Animals, 
                 data.frame(Category = c("Improved", "Decline"), 
                            Reason = c("Hello", "Bla"), 
                            Species = c(0,0)
                            )
)

Animals与用户Alex的回答相同,添加类别的一种不太手动的方法可能是

d <- with(Animals, expand.grid(unique(Category), unique(Reason)))
names(d) <- names(Animals)[1:2]
Animals <- merge(d, Animals, all.x=TRUE)
Animals$Species[is.na(Animals$Species)] <- 0

d首先,让我们用缺少的组合填充data.frame,如下所示

library(dplyr)
Animals2 <- expand.grid(Category=unique(Animals$Category), Reason=unique(Animals$Reason)) %>% data.frame %>% left_join(Animals)

使用“类别”和“原因”的所有组合定义新的数据框,并与数据框“动物”中的“物种”数据合并。通过正确的比例调整ggplot\u x\u离散:

Animals3 <-  expand.grid(Category=unique(Animals$Category),Reason=unique(Animals$Reason))
Animals3 <- merge(Animals3,Animals,by=c("Category","Reason"),all.x=TRUE)
Animals3[is.na(Animals3)] <- 0
Animals3 <- Animals3[order(Animals3$Category,-Animals3$Species),]
ggplot(Animals3, aes(x=Animals3$Reason, y=Species, fill = Category)) + geom_bar(stat="identity", position = "dodge") + scale_x_discrete(limits=as.character(Animals3[Animals3$Category=="Decline","Reason"]))

Animals3+1来回答这个问题,但问题是你需要手动操作(这不是你想要的高数量和可变数量的类别;)。我还是要试试看!提供输出图是一个很好的“尝试我的解决方案”参数!;)谢谢如果我是你,我会修改你问题的标题,以包含“缺少的组合”主题,或者如果缺少一个颜色变量,条的宽度不同的问题。我只是修复了它。如果您希望我再次更改它,请告诉我。与我建议的解决方案类似,但使用基本R命令(无附加包)。美好的
myorder <- Animals2 %>% filter(Category=="Decline") %>% arrange(desc(Species)) %>% .$Reason %>% as.character
ggplot(Animals2, aes(x=Reason, y=Species, fill = Category)) + 
  geom_bar(stat="identity", position = "dodge") + scale_x_discrete(limits=myorder)
Animals3 <-  expand.grid(Category=unique(Animals$Category),Reason=unique(Animals$Reason))
Animals3 <- merge(Animals3,Animals,by=c("Category","Reason"),all.x=TRUE)
Animals3[is.na(Animals3)] <- 0
Animals3 <- Animals3[order(Animals3$Category,-Animals3$Species),]
ggplot(Animals3, aes(x=Animals3$Reason, y=Species, fill = Category)) + geom_bar(stat="identity", position = "dodge") + scale_x_discrete(limits=as.character(Animals3[Animals3$Category=="Decline","Reason"]))