如何使用dev.new()将绘图显示在knitr晕影中?

时间:2014-09-09 09:10:43

标签: r plot knitr cran

我的包产生了许多图表,通常一次多于一个。

使用x11windows设备没有问题,knitr使用包含的图片构建小插图。

但是,提交到CRAN存储库的要求是使用dev.new进行平台无关的绘图。如果我将x11windows替换为dev.new,则我的插图中不会显示任何图片。

有解决方案吗?起初我认为这与在RStudio中绘图相关,但使用新参数dev.new(noRStudioGD = FALSE)没有帮助。另外,从命令行构建软件包并没有解决问题。

干杯,

汤姆

(Windows 7 x64) (R 3.1.1) (RStudio 0.98.507)

2 个答案:

答案 0 :(得分:2)

简短的回答是,你根本不使用dev.new()(或dev.off()或dev.whatever ......)。如果您想要更长的答案,请提供一个最小的可重复示例,演示您的问题究竟是什么。

答案 1 :(得分:0)

我遇到了同样的困难。 这是一种有效的方法:

p1 <- function(x, knitr=FALSE){
    plot(x)
    if(!knitr) dev.new()
    plot(x^2)
}

参数knitr=仅在 中用于小插图构建。

现在,在.Rnw中的/vignettes文件中添加了类似的内容:

%\VignetteEngine{knitr::knitr}
%\VignetteIndexEntry{p1}
\documentclass{article}

\begin{document}

<<setup, include=FALSE>>=
library("knitr")
### Set global chunk options
opts_chunk$set(eval=TRUE,
   ## text results
   echo=TRUE,
   results=c('markup', 'asis', 'hold', 'hide')[1],
   ## plots
   fig.path=c('figure', 'figure/minimal-')[1],
   fig.keep=c('high', 'none', 'all', 'first', 'last')[1],
   fig.align=c('center', 'left', 'right', 'default')[1],
   fig.show=c('hold', 'asis', 'animate', 'hide')[1],
   dev=c('pdf', 'png', 'tikz')[1],
   fig.width=7, fig.height=7, #inches
   fig.env=c('figure', 'marginfigure')[1],
   fig.pos=c('', 'h', 't', 'b', 'p', 'H')[1]
   )
@

<<plot1>>
library("myPackage")
x <- seq(10)
p1(x, knitr=TRUE)
@

\end{document}