1

我正在尝试使用堆叠条形图来显示 2 组值,以使测量 2 组中相同域的值以相反的方向传播,类似于堆叠的负条形图。我通过将一组值设置为负数来“劫持”一个堆积条形图来做到这一点。这给了我想要的图像;但是,我想从底部的堆叠条中删除底片。有没有办法做到这一点?另外,我想知道为什么条形几何中的 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))

4

1 回答 1

2

我认为宽度问题已经解决,geom_bar但由于某种原因,我仍然在 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 有时很难弄清楚在使用负值时如何堆叠事物。事情通常会奏效,它只是警告你要警惕龙。

于 2012-12-06T06:07:35.973 回答