5

我想在 ggplot2 中外部化我的布局,因为我的代码变得非常拥挤。

假设我有一个给定的布局,我将其应用于不同功能的多个绘图。它看起来像这样:

    scale_fill_gradientn(guide="colourbar",colours=costum.colorbar_sand.blue.green)+
      theme (legend.title = element_text(size = 15,family="Arial"))+
      theme (legend.text = element_text(size = 12,family="Arial",angle=45))+
      theme (legend.position = "bottom")+
      coord_map(projection="mercator");

我想把它放在一个外部文件或一个对象中,然后将它调用到我的绘图函数中。

我从knitr 包中尝试了 read_chunk,如下所示:我将上面的空白代码保存在 R 文件中,然后尝试在我的函数中实现它。因此我只是把它写成这样的函数

    function.xy(...){...some ggplot function...
    read_chunk("some\path")
    }

但它没有成功。我也尝试过paste(read_chunk("some\path")),但这不起作用。

我的另一个想法是将它保存为一个对象并粘贴文本,但这不是很好,因为我不知道如何将它保存为纯文本对象(如果有类似的东西) . 谁能建议我如何做到这一点?

4

3 回答 3

5

我做这两种方法之一。在要编织的文件中,我声明了我知道将经常使用的绘图选项,将分组元素保存在列表中,如下所示:

plot.option1 <- list(scale_fill_gradient(guide="colourbar",colours=costum.colorbar_sand.blue.green),
                     theme(legend.title = element_text(size = 15,family="Arial"),
                           legend.text = element_text(size = 12,family="Arial",angle=45),
                           legend.position = "bottom"),
                     coord_map(projection="mercator"))

那么这只是一个附加的问题+ plot.option1

例如:

ggplot(dat, aes(x,y)) + plot.option1

如果你有很多它们(比如公司主题),你可以很容易地将它们放在一个单独的脚本中,然后将它放在你的文件头部进行编织。

最小的例子:

plot.opt <- list(scale_color_brewer(palette="Blues"))
ggplot(diamonds, aes(carat, price, color=color)) + geom_point() + plot.opt
于 2013-02-10T20:53:47.800 回答
5

您可以将布局代码外部化为单独的块。请参阅存储库中的示例 083(及其输出) 。knitr-examples关键是通过<<>>.

于 2013-02-10T21:58:17.467 回答
2

另一个与@brandon-bertelsen 非常相似的选项是创建一个自定义函数:

add.my.layout <- function(g) {
    g + scale_fill_gradientn(guide="colourbar",colours=costum.colorbar_sand.blue.green)+
      theme (legend.title = element_text(size = 15,family="Arial"))+
      theme (legend.text = element_text(size = 12,family="Arial",angle=45))+
      theme (legend.position = "bottom")+
      coord_map(projection="mercator")
}

然后在你的代码中你可以这样做:

myggplot <- ggplot(...)
add.my.layout(myggplot)

如果您愿意,您可以在外部 R 文件中定义您的函数。

于 2013-02-10T20:56:54.297 回答