我还想将 R markdown 转换为 html 和 .docx/.odt,其中的数字具有良好的尺寸和分辨率。到目前为止,我发现最好的方法是在 .md 文档中明确定义图形的分辨率和大小(dpi、fig.width 和 fig.height 选项)。如果你这样做,你就有很好的可用于发布的图表,并且 odt/docx 是可以的。如果您使用远高于默认 72 dpi 的 dpi,问题是图形在 html 文件中看起来太大。以下是我用来处理此问题的 3 种方法(注意,我使用带有 spin() 语法的 R 脚本):
1) 在 knitr 选项中使用 out.extra ='WIDTH="75%"'。这将强制 html 的所有图形占据窗口宽度的 75%。这是一个快速的解决方案,但如果您的地块大小非常不同,则不是最佳解决方案。 (注意,我更喜欢使用厘米而不是英寸,因此到处都是 /2.54)
library(knitr)
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"), dpi = 400,
fig.width = 8/2.54, fig.height = 8/2.54,
out.extra ='WIDTH="75%"'
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
2) 使用 out.width 和 out.height 来指定图形在 html 文件中的像素大小。我使用常量“sc”将绘图的大小缩小为 html 输出。这是更精确的方法,但问题是对于每个图形,您必须同时定义 fig.witdth/height 和 out.width/height ,这真的很无聊!理想情况下,您应该能够在全局选项中指定例如out.width = 150*fig.width(其中 fig.width 从块到块变化)。也许这样的事情是可能的,但我不知道如何。
#+ echo = FALSE
library(knitr)
sc <- 150
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"), dpi = 400,
fig.width = 8/2.54, fig.height = 8/2.54,
out.width = sc*8/2.54, out.height = sc*8/2.54
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54, out.width= sc * 14/2.54, out.height= sc * 10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
请注意,对于这两种解决方案,我认为您不能使用 pandoc 将您的 md 文件直接转换为 odt (不包括数字)。我将 md 转换为 html,然后将 html 转换为 odt(没有尝试过 docx)。
类似的东西(如果以前的 R 脚本名称为“figsize1.R”):
library(knitr)
setwd("/home/gilles/")
spin("figsize1.R")
system("pandoc figsize1.md -o figsize1.html")
system("pandoc figsize1.html -o figsize1.odt")
3) 只需编译您的文档两次,一次使用低 dpi 值 (~96) 用于 html 输出,一次使用高分辨率 (~300) 用于 odt/docx 输出。这是我现在首选的方式。主要缺点是您必须编译两次,但这对我来说并不是问题,因为我通常只在工作结束时才需要 odt 文件来提供给最终用户。我在工作期间使用 Rstudio 中的 html 笔记本按钮定期编译 html。
#+ echo = FALSE
library(knitr)
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"),
fig.width = 8/2.54, fig.height = 8/2.54
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
然后用下面的脚本编译2个输出(注意这里你可以直接将md文件转换成html):
library(knitr)
setwd("/home/gilles")
opts_chunk$set(dpi=96)
spin("figsize3.R", knit=FALSE)
knit2html("figsize3.Rmd")
opts_chunk$set(dpi=400)
spin("figsize3.R")
system("pandoc figsize3.md -o figsize3.odt")