A question on grid - grid.points not spaced properly
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/