我想在另一个人面前放置条形图(我使用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
我希望看到更黑暗的地区有更多的酒吧被吸引,但事实并非如此。
答案 0 :(得分: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
此代码有效。它导致与第一个相符的图片。感谢joran。
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
答案 1 :(得分:3)
“aes()
创建一个未评估的表达式列表”,根据其帮助页面,所以在你的for循环中,你最终会得到相同的图层,因为它们引用了一个未评估的变量名“i” 。当ggplot最终构建层时,它使用i的任何值(更具体地说,如果你给它,它可以查看可选的environment
)。但这在这里不起作用,因为你想为每一层提供不同的i值。您可以在循环中使用substitute()或bquote(),但最好为每个层构造一个新的data.frame。或者更好的是,使用循环创建单个data.frame,并使用变量来跟踪它引用的步骤。然后,您可以使用美学映射和/或构面,这更符合ggplot2的设计(并且比具有许多独立层更有效)。