【问题标题】:Creating a loop to write annotations within ggplot创建一个循环以在 ggplot 中编写注释
【发布时间】:2013-08-06 20:06:32
【问题描述】:

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

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(最后一个)之外的所有数据都需要在末尾有一个“+”。有没有人试过这个?

谢谢

【问题讨论】:

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


    【解决方案1】:

    你的函数已经矢量化了,所以你不需要改变任何东西,

    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
    

    但这比第一个选项效率低且更复杂。

    【讨论】:

    • 太棒了,这是一种非常酷的看待它的方式。谢谢!这正是我想要的,因为我将它直接放到 ggplot 中,我认为这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2020-04-25
    • 2018-01-14
    相关资源
    最近更新 更多