【问题标题】:Scaling plots in Rmd via out.width通过 out.width 在 Rmd 中缩放图
【发布时间】:2016-10-19 01:57:38
【问题描述】:

我正在制作一个 Rmd 文档,其中还包含一些情节。它应该同时导出到 otd 和 pdf。一些数字应该足够小,以使其中两个在生成的 odt 中彼此相邻。

我通过

编织文档
Rscript -e "require(knitr); require(markdown); knit('Test_Markdown.Rmd', 'Test_Markdown.md')"

在 Rmd 中有一个如下所示的情节:

```{r plottestnormal, fig.path = ".", fig.width = 6, fig.height = 6, dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

我希望绘图是一半大小——但要按比例缩放!

这得到正确的大小,但不是缩放:

```{r plottestsmall, fig.path = ".", fig.width = 3, fig.height = 3, dpi = 600, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

据我从the opiton description 了解到,以下内容应该符合我的意思,但它不起作用。

```{r plottestscaled, fig.path = ".", fig.width = 6, fig.height = 6, out.width = 3, out.height = 3, dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

这会在生成的 *md 文件中生成一个 html img 标签:

<img src=".plottestscaled-1.png" title="plot of chunk plottestscaled" alt="plot of chunk plottestscaled" width="3" height="3" />

而且编译时不会在 pdf 和 odt 中显示

pandoc -f markdown "Test_Markdown.md" -o "Test_Markdown.odt"

pandoc -t latex "Test_Markdown.md" -o "Test_Markdown.pdf"

我已经看到this issue 这对我没有进一步的帮助。

我错过了什么?

编辑:

感谢@Yihui,这现在适用于 LaTeX-> pdf 和(可能 - 未经测试)适用于 html。

我说得对吗,*.odt*.docx 导出不支持 out.widthout.height

如果是,它们不适合我的原因可能是什么?

如果不是,我怎样才能在*.odt 中实现相同的效果(比例图)?

(我想导出到pdfodt,因此任何解决方案都可以同时涵盖(至少)这两个。)

这是一个完整的文档,显示了我在通过 rmarkdown::render("Test_Markdown.Rmd", "all") 处理时遇到的问题。

---
title: Scale plot in Rmd
output:
    pdf_document:
        latex_engine: xelatex
    odt_document:
        keep_md: true
---

```{r plottestscaled, fig.path = "./", fig.width = 6, fig.height = 6, out.width = "3in", out.height = "3in", dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

编辑2:

到目前为止,我的“最佳”解决方案是禁用odt 输出中的缩放并在办公室手动重新缩放绘图。不过,不是很可重复......

```{r plottestscaled, fig.path = "./", fig.width = 6, fig.height = 6, out.width=switch(opts_knit$get("rmarkdown.pandoc.to"), latex = "3in", NULL), out.height=switch(opts_knit$get("rmarkdown.pandoc.to"), latex = "3in", NULL), dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)

【问题讨论】:

    标签: r markdown knitr r-markdown


    【解决方案1】:

    Pandoc 的 Markdown 直到最近的版本才支持指定图像的大小,所以当你指定绘图的宽度时,knitr 必须回退到 HTML,HTML 代码将无法工作用于 LaTeX 或 ODT 输出(仅支持原生 Markdown 代码,LaTeX 输出除外,其中还支持原始 LaTeX 代码)。

    简短的回答是使用 rmarkdown 包,而不是自己运行 Pandoc。 knitr 在生成具有宽度属性的图形时将足够聪明地切换到 LaTeX 代码。或者更好的是,只需单击 RStudio IDE 中的Knit 按钮。

    如果您愿意,可以尝试找出所有幕后的技术细节(从knitr::hook_plot_md 开始),但如果您不熟悉 knitrrmarkdown 在内部工作。

    【讨论】:

    • 感谢您的回答!使用 rmarkdown::render() 它确实适用于 LaTeX->pdf 路线。那太棒了!但是,它不适用于 odt 输出。有没有办法在 odt 输出中实现相同的(缩放图)? (另见我上面的编辑。)
    • 否,不支持在 ODT 中设置图形宽度。我不确定 Pandoc 是否支持它。如果是这样,我们当然也可以在 rmarkdown 中添加支持。
    • 感谢您的确认。如果您知道任何解决方法(或者如果此功能可用....),我会非常感兴趣。
    • 似乎很快就会成为可能。 v1.21 milestone 上有一个项目链接到打开的 issue。不过,这个问题只提到了word/ppt。这是否也包括 odt?
    • 下次您可以将其添加到问题中(这次我已经这样做了)。
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2016-08-17
    • 2018-05-18
    • 2021-05-03
    • 2012-02-19
    相关资源
    最近更新 更多