1

我想把条形图放在另一个前面(我正在使用 alphas 来传达信息)

在 ggplot2 中,如果我这样做ggplot() + geom_bar() + geom_bar()了,我最终会得到一个堆叠的条形图,而不是另一层前面的一层。如何更改/禁用此功能?

TPlot = ggplot() + 
  geom_bar(aes(x = 1:3, y=c(1,1,1), width=0.1),stat="identity", alpha=0, colour = "red",position="identity") +
  xlab("x") +
  ylab("y")

for (i in 1:3){
  TPlot = TPlot + geom_bar(aes(x = 1:3, y = c(i,i,i), width=0.1),stat="identity", position="identity", alpha=0.2)
}

TPlot

我希望看到绘制更多条的较暗区域,但事实并非如此。

4

2 回答 2

3

for我不明白为什么,但循环似乎有些奇怪。下面的代码运行良好。但是当我尝试使用for循环时,只geom_bar添加最后一个。

TPlot = ggplot() + 
  geom_bar(aes(x = 1:3, y=c(1,1,1), width=0.1),stat="identity", alpha=0.2,
           position="identity") +
  xlab("x") +
  ylab("y")

TPlot = TPlot + geom_bar(aes(x = 1:3, y = c(2,2,2), width=0.1),
                         stat="identity", position="identity", alpha=0.2)
TPlot = TPlot + geom_bar(aes(x = 1:3, y = c(3,3,3), width=0.1),
                         stat="identity", position="identity", alpha=0.2)

TPlot

在此处输入图像描述

for循环。

TPlot = ggplot() + 
  geom_bar(aes(x = 1:3, y=c(1,1,1), width=0.1),stat="identity", alpha=0.2, 
           position="identity") +
  xlab("x") +
  ylab("y")

for (i in 2:3){
  TPlot = TPlot + geom_bar(aes(x = 1:3, y = c(i,i,i), width=0.1),
                           stat="identity", position="identity", alpha=0.2)
}

TPlot

在此处输入图像描述

此代码有效。它导致图片与第一个相同。感谢乔兰。

TPlot = ggplot() + 
  geom_bar(aes(x = 1:3, y=c(1,1,1), width=0.1),stat="identity", alpha=0.2, 
           position="identity") +
  xlab("x") +
  ylab("y")

for (i in c(2,3)){
  TPlot = TPlot + geom_bar(data=data.frame(x = 1:3, y = c(i,i,i)),
                           aes(x=x, y=y, width=0.1), 
                           stat="identity", alpha=0.2)
}

TPlot
于 2013-05-28T19:56:27.573 回答
3

根据其帮助页面, “aes()创建未评估表达式列表”,因此在您的 for 循环中,您最终会得到相同的层,因为它们引用了未评估的变量名“i”。当 ggplot 最终构建图层时,它使用 i 的任何值(更具体地说,它可以查看可选的environment如果你给一个)。但这在这里不起作用,因为您希望每一层都有不同的 i 值。您可以在循环中使用substitute() 或bquote(),但最好为每一层构造一个新的data.frame。或者更好的是,使用循环创建单个 data.frame,并使用一个变量来跟踪它所指的步骤。然后,您可以使用美学映射和/或刻面,这更符合 ggplot2 的设计目的(并且比拥有许多独立层更有效)。

于 2013-05-28T20:45:58.077 回答