R ggplot2错误:当ymin!= 0时堆栈没有很好地定义

时间:2016-03-25 22:42:37

标签: r plot ggplot2

我已经运行了这个R脚本很长一段时间它总是工作得很好但是今天我把它加载到一台新的同事计算机上并注意到我的图表以不同的方式出现。在预感中,我在我的机器上重新安装了ggplot2,现在我的情节与我的同事一样。

该脚本采用如下所示的数据集:

    Var1    Var2    value   Var3
1   A   Total   -20.3681969 Total
2   B   Total   -7.8687517  Total
3   C   Total   -5.5482684  Total
4   D   Total   -5.380664   Total
5   E   Total   -1.6060702  Total
6   F   Total   -1.5844055  Total
7   G   Total   -1.571284   Total
8   H   Total   -0.2576642  Total
9   I   Total   -0.2448856  Total
10  J   Total   -0.2114562  Total
11  K   Total   -26.2567781 Total
12  L   Total   -18.3848686 Total
13  A   Ghost   0   Ghost
14  B   Ghost   -20.3681969 Ghost
15  C   Ghost   -28.2369485 Ghost
16  D   Ghost   -33.7852169 Ghost
17  E   Ghost   -39.1658809 Ghost
18  F   Ghost   -40.7719511 Ghost
19  G   Ghost   -42.3563566 Ghost
20  H   Ghost   -43.9276406 Ghost
21  I   Ghost   -44.1853049 Ghost
22  J   Ghost   -44.4301904 Ghost
23  K   Ghost   -18.3848686 Ghost
24  L   Ghost   0   Ghost

并创建堆积条形图:

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3, order=-as.numeric(Var2))) + geom_bar(stat="identity")+
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) +
    labs(x="", y="") + 
    scale_y_continuous(labels=format_si()) +
    ggtitle("myData") + 
    guides(fill=FALSE) +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

enter image description here

我的问题是,在重新安装ggp​​lot2之前,绿色条出现在顶部(在x轴和紫色条之间)。我假设新的处理方法与我上面引用的警告有关(虽然我之前也收到了这个消息)。有没有办法告诉ggplot2如何处理负值,因为所有输出都是负数?有没有办法明确地将绿色条放在x轴上?我试图在调用ggplot2时弄乱订单操作符,但无法使其工作。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

正如约兰在评论中指出的那样,ggplot2> = 2.0.0不再支持order美学。此外,堆叠条的顺序不再由因子水平的顺序确定。您需要做的是按照您希望订购条形图的方式订购数据行。

在您的情况下,这相对简单,因为您可以按字母顺序排序:

myData <- dplyr::arrange(myData, Var3, Var1)

但是,通常,字母顺序可能不是您想要的。但你可以改用有序因子。这些允许您定制订单:

myData$Var3 <- ordered(myData$Var3, levels = c("Ghost", "Total"))
myData <- dplyr::arrange(myData, Var3, Var1)
head(myData)
##   Var1  Var2     value  Var3
## 1    A Ghost   0.00000 Ghost
## 2    B Ghost -20.36820 Ghost
## 3    C Ghost -28.23695 Ghost
## 4    D Ghost -33.78522 Ghost
## 5    E Ghost -39.16588 Ghost
## 6    F Ghost -40.77195 Ghost

如您所见,"Ghost"Var3的行现在排在第一位。

现在情节按照您要求的方式订购了酒吧:

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3)) +
  geom_bar(stat = "identity")

enter image description here

警告消息不会消失,并且条形图的排序似乎与它没有关联。如果您的数据中只有正数值,它就会消失:尝试如上绘图,但使用y=-value。因此,如果您绘制负长度的条形图,似乎会出现警告。但我不能说我理解,为什么会这样。

答案 1 :(得分:0)

myData$Var2 <- factor(myData$Var2, levels = rev(levels(myData$Var2)))

这应该有所帮助。此外,您应该更改ggplot中的顺序= as.numeric()