使用 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(...)
我相信这个问题的答案是我做不到,但我不会完全屈服于堕落的绝望,而是转向这个可爱的社区。
如何在已经绘制好 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(...)