如何定义函数内 ggplot 绘图输出的大小以在 rmarkdown 文档中使用?

问题描述 投票:0回答:1

我正在创建一个自定义包,用于为我的组织的 ggplot 和 rmarkdown 输出设置主题,以节省我们的时间和重复工作。我成功地创建了用于设置组织颜色、调色板、渐变和绘图主题的函数。就目前而言,我们可以使用

ggplot() + theme_ofda()
来确保我们所有的地块都符合我们的组织设计标准,所以这很好!

我现在想做的是创建一个函数来以我们的标准格式创建文档标题。我想使用

ggplot()
来执行此操作,以便我们的 rmarkdown 输出可以移植到任何输出格式,而无需创建自定义
.CSS
preamble.tex
文件 [因为我不太习惯以这两种格式创建]。

我们用于报告的标题格式应如下所示[只是跨越大部分文档宽度的紫色背景,标题本身为白色文本]:

我首先在我的包中创建一个名为

ofda_heading()
的新函数。这会调用之前创建的函数,称为
mps_cols()
,它只是我们的组织颜色和关联的十六进制值的列表。

ofda_heading <- function(htitle = "Some Title", pri.color = mps_cols("wine")) {
  ggplot() +
    geom_blank() +
    labs(title = htitle) +
    theme(
      # Specific text definitions
      plot.title = element_text(size = 22.5, family = "Segoe UI Semibold", face = "bold", hjust = 0.5, colour = "white"),
      # Plot aesthetics
      plot.background = element_rect(fill = pri.color, color = pri.color),
      plot.margin = margin(.125, .125, .125, .125, unit = "inches"),
      # Panel aesthetics
      panel.background = element_blank()
    )
}

当我打电话给

ofda_heading(htitle = "My Spoon Is Too Big!")
时,我几乎得到了我期望看到的东西:

我不明白的是如何更改

ggplot()
输出以具有标题本身的高度加上函数中分配的
plot.margin()
。该函数正在创建一个没有绘图的全尺寸绘图。我知道使用
ggsave()
是可能的,但我不打算将其保存到磁盘,因为这将是 rmarkdown 报告的一部分。

所以,所有这些都说明了基本问题:我需要对我的新函数做什么,才能使输出只有标题的大小加上在编织成 rmarkdown 文档时的边距,而不需要我们的员工记住在 rmarkdown 中指定块选项?如果 ggplot() 无法执行此操作,是否有其他方法可以实现我正在寻找的目标,而无需创建自定义

.CSS
preamble.tex
文件?我需要这个函数,我的组织中的任何人都可以调用它来创建他们正在处理的报告的标题。

编辑

:好吧,多考虑一下......也许我只是愚蠢,因为我最近才开始使用 r markdown,但我可以在自定义 r markdown 模板中指定标题块,对吧?使用 chunk 选项设置绘图大小并仍然按原样调用新的 ofda_heading() 函数?如果这确实是解决方案,我需要对块选项做什么才能使其正常工作?

    

r ggplot2 r-markdown
1个回答
0
投票
ggplot

作为标题或像我想做的任何事情的人。事实证明,我们可以使用knitr chunk选项来很容易地解决这个问题。

#Define the title/header function in the package:
ofda_heading <- function(title = "Some Title", pri.color = mps_cols("wine")) {
  ggplot() +
    geom_blank() +
    labs(title = title) +
    theme(
      # Specific text definitions
      plot.title = element_text(size = 22.5, family = "Segoe UI Semibold", face = "bold", hjust = 0.5, colour = "white"),
      # Plot aesthetics
      plot.background = element_rect(fill = pri.color, color = pri.color),
      plot.margin = margin(.25, .125, .125, .125, unit = "inches"),
      # Panel aesthetics
      panel.background = element_blank()
    )
}

定义完毕并加载包后,请在 
fig.height

文档中使用 kknit 块选项

fig.width
fig.align
.Rmd
来稍微扰乱输出:
```{r title_chunk, fig.height=.5, fig.width=8, fig.align='center'}
ofda_heading()
```

这似乎暂时解决了我的问题,尽管我知道这是一个权宜之计,直到我能够认真学习并学习 
css

LaTeX
正确地完成这一切。
    

© www.soinside.com 2019 - 2024. All rights reserved.