创建一个循环来在ggplot中编写注释

时间:2013-08-06 20:06:33

标签: r loops ggplot2 user-defined-functions annotate

我正在创建图表,其中白线打破了酒吧前面的栏(抱歉无法发布图片)。我已经得到了一次代码但是我对循环还不是很好。

library(ggplot2)

count <- c(61.8,18.8)
name <- c("A","B")
yes <- data.frame(count,name)

j <-   ggplot(yes, aes(x=name, y=count)) + 
geom_bar(stat="identity", position="dodge") 

只添加一行我创建了这个函数......

b <- function (yx){
j + annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

b(8)

这就是我被困住的地方,我想制作一个可以通过像...这样的矢量循环的循环。

yx <- c(8,10,20)

并在8,10和20处创建一行。一个棘手的问题是除终端1(最后)之外的所有数据都需要在结尾处有一个“+”。有没人试过这个?

由于

1 个答案:

答案 0 :(得分:4)

您的功能已经过矢量化,因此您无需更改任何内容,

add_lines <- function(yx){
  annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

j + add_lines(c(8,10,20))

但是,从概念上讲,如果你想逐个添加行,你可以简单地使用一个列表:

add_oneline <- function(yx){
  annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

lines <- lapply(c(8,10,20), add_oneline)
j + lines

但这比第一种方案效率低,更复杂。