[R] Plot to a device and examine the plot?

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Sun Oct 15 18:24:25 CEST 2023

On 15/10/2023 12:05 p.m., Shu Fai Cheung wrote:
> Let me clarify my question:
> plot.new()
> polygon(c(.5, .5, .75, .8), c(.25, .3, .4, .5))
> If the device is an on-screen device, can I check whether a particular area
> has anything drawn on it, or, to be precise, whether the color of a
> particular area has all pixels equal to the background color. That is, if
> the background is white, can I know whether a particular area is white?
> E.g.,  in the case above, the area bounded by rect(0, 0, .25, .25) is
> completely white, while the area bounded by rect(0, 0, .75, .75) is not
> because part of border of the polygon, black by default, has been drawn in
> this area.
> If the device is an image file, then I can check the color of a pixel. I
> would like to know whether I can do the same with an on-screen device.

I think the answer is that you can't do that in general.  However, in 
general you can copy a plot to a different device using dev.copy() and 
examine it there.  It won't be pixel-by-pixel identical, but will 
contain the same components, likely with slightly different scaling and 
positioning if the new device isn't the same as the old one.

You can also save the commands that drew the plot using recordPlot() and 
redraw it using replayPlot() (which is essentially what dev.copy() 
does), but the format of the object saved by recordPlot() is not 
documented, and is subject to change with R version changes.

Duncan Murdoch

More information about the R-help mailing list