[R] test if something was plotted on pdf device

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Thu Sep 12 14:28:35 CEST 2019

On 12/09/2019 7:10 a.m., PIKAL Petr wrote:
> Dear all
> Is there any simple way checking whether after calling pdf device something was plotted into it?
> In interactive session I used
> if (dev.cur()==1) plot(ecdf(rnorm(100))) else plot(ecdf(rnorm(100)), add=T, col=i)
> which enabled me to test if plot is open
> But when I want to call eg. pdf("test.pdf") before cycle
> dev.cur()==1 is FALSE even when no plot is drawn and plot.new error comes.
>> pdf("test.pdf")
> if (dev.cur()==1) plot(ecdf(rnorm(100))) else plot(ecdf(rnorm(100)), add=T, col=i)
> Error in segments(ti.l, y, ti.r, y, col = col.hor, lty = lty, lwd = lwd,  :
>    plot.new has not been called yet

I don't know if this is reliable or not, but you could use code like this:

   f <- tempfile()
   blankPlot <- recordPlot()


   ...  unknown operations ...

   if (dev.cur() == 1 || identical(recordPlot(), blankPlot))
     plot(ecdf(rnorm(100)), add=TRUE, col=i)

Duncan Murdoch

More information about the R-help mailing list