我正在尝试使用堆叠条形图来显示2组值,使得测量两组中相同域的值沿相反方向行进,类似于堆叠负条形图。我通过将一个组值设置为负数来“劫持”堆积条形图。这给了我想要的形象;但是,我想从底部的堆叠条中删除底片。有没有办法做到这一点?另外,我想知道为什么bar geom中的width =选项不会调整条的宽度?当我在geom_bar规范中添加width = 0.5作为选项时,我得到错误:
Warning message:
Stacking not well defined when ymin != 0
无论如何,提前感谢您提供的任何帮助。我的示例代码如下:
test <- structure(list(Mode = structure(c(2L, 1L, 3L, 2L, 1L, 3L), .Label = c("Air","Land", "Sea"), class = "factor"), Side = structure(c(2L, 2L,2L, 1L, 1L, 1L), .Label = c("Allies", "Axis"), class = "factor"),Value = c(72L, 12L, 16L, -84L, -12L, -22L)), .Names = c("Mode", "Side", "Value"), class = "data.frame", row.names = c(NA, -6L))
p <- ggplot(test, aes(x= Mode, y=Value, fill= Mode)) + geom_bar(color = "black", stat="identity", data=subset(test, Side == "Axis")) + geom_bar(color = "black", stat="identity", data=subset(test, Side == "Allies")) + scale_fill_brewer(type = "seq", palette = 1)+ guides(fill=FALSE) + scale_y_continuous(breaks=seq(-100, 100,10))
答案 0 :(得分:2)
我认为geom_bar
中的width issue已经解决,但由于某种原因,我仍然在0.9.2.1中看到它。我可能在这方面遗漏了一些东西,但在aes()
内设置宽度的旧修复仍然适用于我。
另外,我认为你的意思是你想要0以下的y轴标签不是负数,但你的问题并不完全清楚。如果我是对的,那么这可能就是你所追求的:
abs_format <- function(){
function(x){
abs(x)
}
}
p <- ggplot(test, aes(x= Mode, y=Value, fill= Mode,width = 0.1)) +
geom_bar(color = "black", stat="identity", data=subset(test, Side == "Axis")) +
geom_bar(color = "black", stat="identity", data=subset(test, Side == "Allies")) +
scale_fill_brewer(type = "seq", palette = 1) +
guides(fill=FALSE) +
scale_y_continuous(breaks=seq(-100, 100,10),labels = abs_format())
此外,我应该补充一点,关于堆叠未正确定义的消息是不错误。它只是一个警告,意味着你应该注意。 ggplot有时会很难确定在使用负值时如何堆叠东西。事情通常会起作用,它只是警告你要警惕龙。