Sharpie
2012-Jan-11 18:11 UTC
[Rd] Inconsistencies in device_Raster when axes are reflected
I noticed some undocumented and inconsistent behavior in device_Raster when a plot is produced with reflected axes such as: image(volcano, xlim = c(1,0), useRaster = TRUE) image(volcano, ylim = c(1,0), useRaster = TRUE) The `pdf` device will perform horizontal and vertical reflections, while `quartz` will ignore the transformations when plotting to the screen, but when plotting to a file, `quartz(file = 'test.pdf', type = 'pdf')`, it will produce horizontal reflections and ignore vertical ones. When the `xlim` or `ylim` is reversed, negative widths and heights are passed to the C function `device_Raster`, which is not a behavior documented in `R_ext/GraphicsDevice.h`. Also, the values of `x` and `y` passed to `device_Raster` will be shifted by the width or height of the image such that the coordinates no longer reference the bottom-left corner of the image as `R_ext/GraphicsDevice.h` says they should. Given the inconsistencies in documentation and behavior, I am wondering what the intended behavior of `device_Raster` is in this situation. Thanks! -Charlie ----- Charlie Sharpsteen Undergraduate-- Environmental Resources Engineering Humboldt State University -- View this message in context: http://r.789695.n4.nabble.com/Inconsistencies-in-device-Raster-when-axes-are-reflected-tp4286320p4286320.html Sent from the R devel mailing list archive at Nabble.com.
Paul Murrell
2012-Jan-12 02:58 UTC
[Rd] Inconsistencies in device_Raster when axes are reflected
Hi On 12/01/2012 7:11 a.m., Sharpie wrote:> I noticed some undocumented and inconsistent behavior in device_Raster when a > plot is produced with reflected axes such as: > > image(volcano, xlim = c(1,0), useRaster = TRUE) > image(volcano, ylim = c(1,0), useRaster = TRUE) > > The `pdf` device will perform horizontal and vertical reflections, while > `quartz` will ignore the transformations when plotting to the screen, but > when plotting to a file, `quartz(file = 'test.pdf', type = 'pdf')`, it will > produce horizontal reflections and ignore vertical ones. > > When the `xlim` or `ylim` is reversed, negative widths and heights are > passed to the C function `device_Raster`, which is not a behavior documented > in `R_ext/GraphicsDevice.h`. Also, the values of `x` and `y` passed to > `device_Raster` will be shifted by the width or height of the image such > that the coordinates no longer reference the bottom-left corner of the image > as `R_ext/GraphicsDevice.h` says they should. > > Given the inconsistencies in documentation and behavior, I am wondering what > the intended behavior of `device_Raster` is in this situation.I think the problem is that I just failed to anticipate this situation (i.e., the current documentation and behaviour both assume xlim[1] < xlim[2] and ylim[1] < ylim[2]). Will take a look at where to apply a fix (EITHER allow the API to be more flexible [allow negative 'width' and 'height' and 'x' and 'y' to be other than left-bottom], which will require complicating the code in some devices OR keep the API fixed and complicate the graphics engine code instead). The rotation argument adds an interesting twist ... Thanks for the report! Paul> Thanks! > > -Charlie > > ----- > Charlie Sharpsteen > Undergraduate-- Environmental Resources Engineering > Humboldt State University > -- > View this message in context: http://r.789695.n4.nabble.com/Inconsistencies-in-device-Raster-when-axes-are-reflected-tp4286320p4286320.html > Sent from the R devel mailing list archive at Nabble.com. > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- 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/