我倾向于以极其复杂的方式结束ggplot
数字具有很多自定义功能,因此我很自然地将它们作为函数添加到我的代码中,以便我可以轻松地重用它们。当我想使用我的自定义函数之一,但稍微调整它时,就会出现问题,例如删除或添加我已经在函数内定义的几何图形的美感。我对此的选择是:
创建一个几乎重复的函数,但添加了特定的更改,并且更改了函数名称以反映这一点或
向函数添加参数以改变ggplot
是在函数内部构造的
我尽可能地尝试选择 2.,因为它明显减少了脚本中的冗余和混乱程度。
然而,有时 2. 在函数内部几乎退化为 1.,迫使我重新输入包含多个参数的整个 geom 函数。我将给出一个非常简单的例子,记住我所拥有的功能非常复杂,值得我在这里做的深思:
gg_custom_point <- function(df, xvar, yvar, gvar=NA){
g <- ggplot(df)
if(is.na(gvar)){
# do geom without colour
g <- g + geom_point(aes_string(x=xvar, y=yvar))
}
else{
# do geom with colour - mostly redundant code
g <- g + geom_point(aes_string(x=xvar, y=yvar, colour=gvar))
}
return(g)
}
# I can use the same function to make slightly different custom plots
gg_custom_point(mtcars, "wt", "mpg")
gg_custom_point(mtcars, "wt", "mpg", "qsec")
问题是我不得不重新输入整个内容geom_point
而不仅仅是添加美感。如果我希望能够为一个几何体调整多种美学,那么冗余问题就更糟糕了——我必须输入包含给定参数中可能的每种美学组合的几何体。
我可以这样做:
g <- g + geom_point(aes_string(x=xvar, y=yvar))
if(!is.na(gvar)){
# Add to the global aesthetic - no need to retype the whole geom
g <- g + aes_string(colour=gvar)
}
但这并不能扩展到使用多个数据源的多个几何图形,因为所有几何图形都需要使用这种颜色美感和gvar
column.
有没有一种方法可以轻松地为已添加到的特定几何图形添加美感ggplot
目的?或者,有没有更好的使用方法ggplot2
自定义函数中的函数和几何图形?