从knitr中的同一块/语句生成两个绘图

从knitr中的同一块/语句生成两个绘图,r,knitr,R,Knitr,是否可以从.Rmd文档中以不同的大小输出相同图形的两个版本的绘图生成代码?要么通过块选项(我在这里没有看到任何直接有效的方法),要么通过自定义knitrhook?最好使用png设备完成此操作 我的动机是:我希望能够输出一个大小相同的图形,可以内联到已编译的HTML文档中,以及另一个用户可以在单击(思考)后显示的图形。我想我将能够处理必要的脚本,使之工作;但是,首先我需要说服R/knitr输出两个版本的图 虽然我确信有解决办法,但最好是有办法让它在幕后“正常工作”,例如通过knitrhook。这样

是否可以从
.Rmd
文档中以不同的大小输出相同图形的两个版本的绘图生成代码?要么通过块选项(我在这里没有看到任何直接有效的方法),要么通过自定义
knitr
hook?最好使用
png
设备完成此操作

我的动机是:我希望能够输出一个大小相同的图形,可以内联到已编译的HTML文档中,以及另一个用户可以在单击(思考)后显示的图形。我想我将能够处理必要的脚本,使之工作;但是,首先我需要说服R/
knitr
输出两个版本的图

虽然我确信有解决办法,但最好是有办法让它在幕后“正常工作”,例如通过
knitr
hook。这样,我们不必对块中的R代码做任何特殊的处理,只需修改解析/计算该块的方式

或者,可以使用缩放良好的SVG图形,但这样我们就无法很好地推断出打印标签的大小,而矢量图形对于具有多个点的打印并不适用。

如果您只需要大小图形,您可以:

<<plotSmall, fig.height=6, fig.width=8, out.width='.1\\textwidth'>>=
plot(...)
@
<<plotBig, fig.height=6, fig.width=8, out.width='.99\\textwidth'>>=
plot(...)
@
=
绘图(…)
@
=
绘图(…)
@
或者更简单地说:

<<plotBoth, fig.height=6, fig.width=8, out.width=c('.1\\textwidth', '.9\\textwidth')>>=
plot(...)
plot(...)
@
=
绘图(…)
绘图(…)
@

(当然你知道,但是.Rmd代表LaTeX,而.Rhtml代表html,-.Rhtml语法略有不同。)

我以为没有解决办法,正要对@baptiste说不,但很快我就想到了一个办法。下面是一个R降价示例:

```{r test, dev='png', fig.ext=c('png', 'large.png'), fig.height=c(4, 10), fig.width=c(4, 10)}
library(ggplot2)
qplot(speed, dist, data=cars)
```

See the [original plot](figure/test.png) and
a [larger version](figure/test.large.png).
我认为
dev
的矢量化版本不起作用的原因是:对于
dev=c('png','png')
,第二个png文件将覆盖第一个,因为图形文件名相同。然后我意识到
fig.ext
也是矢量化的,像
large.png
这样的文件扩展名并不会真正破坏文件扩展名
png
;这就是为什么它是一个黑客


无论如何,通过矢量化版本的
dev
fig.ext
fig.height
fig.width
,可以将同一绘图保存到多个版本。如果您对图形文件扩展名使用确定性模式,我认为您还可以编写一些JavaScript代码来自动将花式方框附加到图像上。

Perfect!谢谢一辉!这真是一个黑客解决方案