使用 ggplot2 在事后添加点;用户定义函数

Adding points after the fact with ggplot2; user defined function

我相信这个问题的答案是我做不到,但我不会完全屈服于堕落的绝望,而是转向这个可爱的社区。

如何在已经绘制好 ggplot 之后向其添加点(或任何附加层)?通常我会将绘图保存到一个变量中,然后只添加 + geom_point(...),但我试图将其包含在我正在编写的函数中。我希望函数在 plot=T 时创建新图,在 plot=F 时向现有图添加点。我可以用基本的绘图包来做到这一点:

fun <- function(df,plot=TRUE,...) {
...
if (!plot) { points(dYdX~Time.Dec,data=df2,col=col) }
else { plot(dYdX~Time.Dec,data=df2,...) }}

我想运行这个函数多次使用不同的数据帧,从而产生一个包含多个系列的绘图。

例如,

fun(df.a,plot=T)
fun(df.b,plot=F)
fun(df.c,plot=F)
fun(df.d,plot=F)

问题是因为 R 中的函数没有副作用,所以我无法访问第一个命令中绘制的图。我无法将绘图保存到 -> p,然后在后面的函数中调用 p。至少,我认为我做不到。

从您的函数返回一个 ggplot 绘图对象,您可以像这样将其提供给下一个函数调用:

ggfun = function(df, oldplot, plot=T){
  ...
  if(plot){
    outplot = ggplot(df, ...) + geom_point(df, ...)
  }else{
    outplot = oldplot + geom_point(data=df, ...)
  }
  print(outplot)
  return(outplot)
}

记得将返回的绘图对象赋值给一个变量:

cur.plot = ggfun(...)