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? Thanks Saptarshi Saptarshi Guha | sapsi at pobox.com | http://www.stat.purdue.edu/~sguha
A question on grid - grid.points not spaced properly
6 messages · Paul Murrell, Saptarshi Guha
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/
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.
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.
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/
Hi, Thank you for the detailed explanation.
If it's any consolation, this is true of the predefined plotting symbols
True. Its good to be aware of the structure of R graphics. Have been planning to pick up the Grid book.
p.s. An exercise for the reader: why do all of these plusses look the same on screen? plot(1:10, 1:10, pch="+")
Is this because we are getting the system/device font renderer(e.g the postscript renderer, OS X font renderer) to draw the character "+" so the widths/height will be exactly measure, but R is drawing itself when doing pch=3 ? Thanks Saptarshi Saptarshi Guha | sapsi at pobox.com | http://www.stat.purdue.edu/~sguha
On Dec 5, 2006, at 3:58 PM, Paul Murrell wrote:
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/
Hi
Saptarshi Guha wrote:
Hi, Thank you for the detailed explanation.
If it's any consolation, this is true of the predefined plotting symbols
True. Its good to be aware of the structure of R graphics. Have been planning to pick up the Grid book.
p.s. An exercise for the reader: why do all of these plusses look the same on screen? plot(1:10, 1:10, pch="+")
Is this because we are getting the system/device font renderer(e.g the postscript renderer, OS X font renderer) to draw the character "+" so the widths/height will be exactly measure, but R is drawing itself when doing pch=3 ?
Yep. (Slightly more accurately, it's the difference between getting the system to draw a couple of lines and getting the system to draw a character from a font.) Which suggests that if you want to design a new plotting symbol that looks good everywhere, all you have to do is design a new font! :) Paul
Thanks Saptarshi Saptarshi Guha | sapsi at pobox.com | http://www.stat.purdue.edu/~sguha On Dec 5, 2006, at 3:58 PM, Paul Murrell wrote:
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/
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/