如何在“负”叠加条形图上劫持y轴

时间:2012-12-06 05:50:28

标签: r ggplot2

我正在尝试使用堆叠条形图来显示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))

1 个答案:

答案 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())

enter image description here

此外,我应该补充一点,关于堆叠未正确定义的消息是错误。它只是一个警告,意味着你应该注意。 ggplot有时会很难确定在使用负值时如何堆叠东西。事情通常会起作用,它只是警告你要警惕龙。