[R] A question on grid - grid.points not spaced properly

Paul Murrell p.murrell at auckland.ac.nz
Tue Dec 5 21:58:40 CET 2006


Hi


Saptarshi Guha wrote:
> Hi,
>     Thank you for the explanation. I have one further question - should 
> i wish to plot to the screen, which units (apart from bigpts) for exact 
> plotting.
> Essentially i wish to create my own plotting character - hence the 
> pch="." and the surrounding dots - so it would be nice if i could place 
> the surrounding dots exactly.


R graphics is a vector system rather than a raster system, which means
that all locations and dimensions are effectively on an infinite
resolution device.  There are no "pixels" to refer to.  So you are
already placing the dots exactly.

When graphics are rendered by a specific device, there will be rounding
if the device is raster (e.g., screen).  So not all devices can render
your dots exactly.

If you know that your plotting character will only be rendered on a
raster device, "native" coordinates in the top-level grid viewport refer
(approximately) to pixels, e.g.,

> grid.newpage()
> grid.rect(x=0, y=0, width=10, height=10, default.units="native",
            just=c("left", "bottom"))
> grid.rect(x=10, y=10, width=10, height=10, default.units="native",
            just=c("left", "bottom"))
> grid.rect(x=20, y=20, width=10, height=10, default.units="native",
            just=c("left", "bottom"))

but you can still get rounding problems and these coordinates are not
available in any other grid viewport.

In other words, you cannot predict exactly which pixels will get turned
on when you draw something on screen with R graphics.

If it's any consolation, this is true of the predefined plotting symbols
too!  (do all the plusses look the same on screen?)

plot(1:10, 1:10, pch=3)

Paul

p.s.  An exercise for the reader:  why do all of these plusses look the
same on screen?

plot(1:10, 1:10, pch="+")


>     Thank you
>     Saptarshi Guha
> 
> 
> Paul Murrell wrote:
>> Hi
>>
>>
>> Saptarshi Guha wrote:
>>   
>>> Hello,
>>> 	How can i 'fix' the following output.
>>>
>>> 	v=viewport(x=216/2, y=216/2,w=216, h=216,default.units = "bigpts")
>>> 	pushViewport(v)
>>> 	x=c(119,130,140,151)
>>> 	y=c(124,124,124,124)
>>> 	grid.points(x,y,size=unit(1,"bigpts"),default.units="bigpts",pch=".")
>>> 	grid.points(x-2,y,size=unit(1,"bigpts"),default.units="bigpts",pch=".")
>>> 	grid.points(x+2,y,size=unit(1,"bigpts"),default.units="bigpts",pch=".")
>>> 	grid.points(x,y-2,size=unit(1,"bigpts"),default.units="bigpts",pch=".")
>>> 	grid.points(x,y+2,size=unit(1,"bigpts"),default.units="bigpts",pch=".")
>>>
>>>
>>> 	One would expect to get a 4 figures composed of 5 dots each  - 2  
>>> vertically spaced and 2 horizontally spaced symmetrically around the  
>>> center dot.
>>> 	However i seem to get odd results - e.g on Quartz(OS X) output, the  
>>> last command, places the dot bang next to the center dot.
>>> 	On 'jpeg' output with higest quality, this oddity happens with the 'x 
>>> +2' command.
>>>
>>> 	This doesn't happen to all of the points, only some - and not necc.  
>>> the edge figures.
>>>
>>> 	Is there anyway i can control this?
>>>     
>>
>> I think you are seeing a rasterization effect.  Both on screen and in a
>> bitmap format you are essentially turning on a single pixel at a time.
>> The locations you are giving do not necessarily correspond to an exact
>> pixel location (bigpoints are in 1/72 inches, but your screen might have
>> a resolution of 96 ppi) so you just get the nearest pixel to that
>> location.  So the gap you specify of two bigpoints sometimes comes out
>> as 2 pixels, sometimes as 1 pixel (for example).
>>
>> For comparison, try running your code on a PDF (or other vector format)
>> device;  the result is much more what you are expecting I think.
>>
>> Paul
>>
>>
>>   
>>> 	Thanks
>>> 	Saptarshi
>>>
>>> Saptarshi Guha | sapsi at pobox.com | http://www.stat.purdue.edu/~sguha
>>>
>>> ______________________________________________
>>> R-help at stat.math.ethz.ch mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>     
>>   

-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/




More information about the R-help mailing list