From p@u| @end|ng |rom @t@t@@uck|@nd@@c@nz  Tue Mar 12 23:53:42 2019
From: p@u| @end|ng |rom @t@t@@uck|@nd@@c@nz (Paul Murrell)
Date: Wed, 13 Mar 2019 11:53:42 +1300
Subject: [Rd] R cairo_pdf function does not respect plotting boundaries
In-Reply-To: <CAO0anGmLgRSFJWaRmYbAnKL-8EwaZXyUjBCu+dBnLMV39wTwGA@mail.gmail.com>
References: <CAO0anGmxEwS2VtAqT-i6701QrkFCL90cOneB+c_y3uJ_40aG9w@mail.gmail.com>
 <581bf016-0b51-977b-200d-bbeef95f9046@stat.auckland.ac.nz>
 <CAO0anGmLgRSFJWaRmYbAnKL-8EwaZXyUjBCu+dBnLMV39wTwGA@mail.gmail.com>
Message-ID: <87534dc5-c21c-8eee-649d-f43c77d4c399@stat.auckland.ac.nz>

Hi

I have committed this fix to r-devel (r76226).

Please let me know if this does not fix things for you.

Paul

On 5/03/19 8:22 PM, Lee Steven Kelvin wrote:
> Hi Paul,
> 
> Great, thank you for looking in to this, and I'm glad that you're able 
> to reproduce it at your end too.
> 
>  From your reply, I'm happy that it seems like the fix may be fairly 
> trivial, but I understand the necessity for caution.
> 
> If there's anything else I can do to help, please do let me know.
> 
> Thank you again,
> Best,
> Lee
> 
> 
> On Monday, 4 March 2019, Paul Murrell <paul at stat.auckland.ac.nz 
> <mailto:paul at stat.auckland.ac.nz>> wrote:
> 
>     Hi
> 
>     (cc'ed to r-devel where further discussion should probably take place)
> 
>     Thanks Lee.? I see that problem.
> 
>     There is a "+ 1" in the Cairo device code for setting the clipping
>     region
>     (https://github.com/wch/r-source/blob/ba600867f2a94e46cf9eb75dc8b37f12b08a4561/src/library/grDevices/src/cairo/cairoFns.c#L156
>     <https://github.com/wch/r-source/blob/ba600867f2a94e46cf9eb75dc8b37f12b08a4561/src/library/grDevices/src/cairo/cairoFns.c#L156>)
> 
> 
>     Remove the "+ 1" and the problem goes away (for your example at least).
> 
>     The comment on the line above that code suggests that the "+ 1" was
>     modelled on the X11 device code, but X11 deals in integer pixels and
>     Cairo (at the API level) does not, so it would seem that the "+ 1"
>     is just unnecessary.
> 
>     However, I have a slight nagging worry that we have been here
>     before, so I would like to do some more testing before committing
>     that change.
> 
>     Paul
> 
>     On 1/03/19 8:13 AM, Lee Steven Kelvin wrote:
> 
>         Hello all,
> 
>         When producing a plot in R using the cairo_pdf device, the
>         resultant plot does not respect the plotting boundaries. Lines
>         and shaded regions will spill over the lower x-axis and the
>         right-side y-axis (sides 1 and 4). I would like to know if it is
>         possible to fix this behaviour when using 'cairo_pdf' in R?
> 
>         As an example, see the image at this web link:
>         https://i.stack.imgur.com/0lfZd.png
>         <https://i.stack.imgur.com/0lfZd.png>
> 
>         This image is a screenshot of a PDF file constructed using the
>         following minimum working example code:
> 
>         cairo_pdf(file="test.pdf", width=0.5, height=0.5)
>         par("mar"=c(0.25,0.25,0.25,0.25))
>         plot(NA, xlim=c(0,1), ylim=c(0,1), axes=FALSE)
>         polygon(x=c(-1,-1,2,2), y=c(-1,2,2,-1), density=5, col="green3",
>         lwd=10)
>         abline(h=0.25, col="red", lwd=5)
>         abline(h=0.75, col="hotpink", lwd=5, lend=1)
>         abline(v=0.25, col="blue", lwd=5)
>         abline(v=0.75, col="cyan", lwd=5, lend=1)
>         box()
>         dev.off()
> 
>         Here I'm plotting a shaded region in green using 'polygon', with
>         boundaries that lie outside the plot. I'm also drawing two sets
>         of horizontal/vertical lines using 'abline'. The first in each
>         pair uses standard rounded line caps, whilst the second in each
>         pair uses butt line caps.
> 
>         As you can see, the shading lines and the default rounded-end
>         ablines all extend beyond the plotting region along the lower
>         and right-hand side axes. Only when using 'lend=1' am I able to
>         contain the ablines to the plotting region. I know of no such
>         fix for the shading lines however.
> 
>         I would naively expect the R plotting region to be respected,
>         and for it to be impossible to plot outside of this region
>         unless explicitly specified by the user.
> 
>         I have tested this on the other cairo devices (SVG and PS), and
>         also reproduce the same behaviour, indicating that this is an
>         issue with the cairo graphics API, or its implementation within R.
> 
>         This behaviour does not occur when using the standard R 'pdf'
>         graphics device. I would switch to 'pdf' in general, however,
>         'cairo_pdf' has several advantages over 'pdf', notably, reduced
>         output file sizes on occasion and support for a larger array of
>         UTF-8 characters, so ideally I would prefer to use cairo_pdf.
> 
>         I should note that I have also posted this message on
>         StackOverflow at this web link:
>         https://stackoverflow.com/questions/54892809/r-cairo-pdf-function-does-not-respect-plotting-boundaries
>         <https://stackoverflow.com/questions/54892809/r-cairo-pdf-function-does-not-respect-plotting-boundaries>
> 
>         Thank you in advance for any insights into this issue.
> 
>         Sincerely,
>         Lee Kelvin
> 
> 
> 
>         --
>         Dr Lee Kelvin
>         Department of Physics
>         UC Davis
>         One Shields Avenue
>         Davis, CA 95616
>         USA
> 
>         Ph: +1 (530) 752-1500
>         Fax: +1 (530) 752-4717
> 
> 
>          ? ? ? ? [[alternative HTML version deleted]]
> 
>         ______________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org>?mailing list
>         -- To UNSUBSCRIBE and more, see
>         https://stat.ethz.ch/mailman/listinfo/r-help
>         <https://stat.ethz.ch/mailman/listinfo/r-help>
>         PLEASE do read the posting guide
>         http://www.R-project.org/posting-guide.html
>         <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 <mailto:paul at stat.auckland.ac.nz>
>     http://www.stat.auckland.ac.nz/~paul/
>     <http://www.stat.auckland.ac.nz/~paul/>
> 
> 
> 
> -- 
> Dr Lee Kelvin
> Department of Physics
> UC Davis
> One Shields Avenue
> Davis, CA 95616
> USA
> 
> Ph: +1 (530) 752-1500
> Fax: +1 (530) 752-4717
> 

-- 
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/



[Rd] R cairo_pdf function does not respect plotting boundaries
Paul Murrell