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"]))