Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从ggplot2获取几何图形线和镶嵌面包裹,以便在函数内部工作_R_Ggplot2 - Fatal编程技术网

R 如何从ggplot2获取几何图形线和镶嵌面包裹,以便在函数内部工作

R 如何从ggplot2获取几何图形线和镶嵌面包裹,以便在函数内部工作,r,ggplot2,R,Ggplot2,我正在使用ggplot2探索不同军事行动对谋杀率的影响。为了显示效果,我在手术发生时画了一条垂直线,并在手术前后画了一条平滑的谋杀率线 我已经写了一个小平面图来展示这一点。它工作得很好,但是当转换成函数时,我在使用局部变量绘制垂直线时会出错 下面是一些示例代码: drawTS <- function(df, dates, text) { p <- ggplot(df, aes(date, murders)) + facet_wrap(~ county, ncol

我正在使用ggplot2探索不同军事行动对谋杀率的影响。为了显示效果,我在手术发生时画了一条垂直线,并在手术前后画了一条平滑的谋杀率线

我已经写了一个小平面图来展示这一点。它工作得很好,但是当转换成函数时,我在使用局部变量绘制垂直线时会出错

下面是一些示例代码:

drawTS <- function(df, dates, text) {
    p <- ggplot(df, aes(date, murders)) +
      facet_wrap(~ county, ncol = 1,
                 scale="free_y") +
      scale_x_date() +
      geom_smooth(aes(group = group), se = FALSE)
    for(i in 1:length(dates)) {
      #If it's not a global variable I get an object not found error
      temp[i] <<- dates[i]
      p <- p + geom_text(aes(x,y), label = text[i],
                  data = data.frame(x = dates[i], y = -10),
                  size = 3, hjust = 1, vjust = 0) +
           #Here's the problem
           geom_vline(xintercept=temp[i], alpha=.4)
    }
    p
}

library(ggplot2)
df <- data.frame(date = rep(seq(as.Date("2007/1/01"),
                          length=36, by='1 month'),4),
               murders = round(runif(36*4) * 100),
               county = rep(rep(factor(1:4),9),each=4),
               group = rep(c(rep(1,6), rep(2,12),rep(3,18))), each=4)
dates <- c(as.Date("2007/6/15"), as.Date("2008/6/15"))
temp <- c()
drawTS(df, dates, c("Op 1","Op 2"))

drawTS我不知道是什么导致了错误,但我可以想出一个解决方案,用如下数据帧替换for循环:

date.df<-data.frame(d=dates,t=text)
p <- p + geom_text(aes(x=d,label=t),y=0,
                   data = date.df,
                   size = 3, hjust = 1, vjust = 0)
p<-p+geom_vline(aes(xintercept=d),data=date.df,alpha=.4)
date.df