[R] Trying to Learn Details of Grid Graphics, Help Page Errors

biii m@iii@g oii de@@ey@ws biii m@iii@g oii de@@ey@ws
Fri Sep 24 05:15:22 CEST 2021

Hi Paul,

Thanks very much for the pointer!

With that and a bit more investigation, I was able to make the following
functions that seem to work in initial testing.




# The no_clipping function indicates if a shape is clipped in any dimension
# relative to the entire device.  It should work for any rectangular shaped
# grob.
no_clipping <- function(x) {
  # Check the cardinal directions and corners to allow for any rotation
  angles <- seq(0, 3.5, by=0.5)*90
  if ("rot" %in% names(x)) {
    # At least text grobs have a "rot" attribute
    angles <- angles + (x$rot*pi/180)
  edges_raw <-
      x=grid::grobX(x, theta=angles),
      y=grid::grobY(x, theta=angles)
  edges <-
      x=grid::convertX(edges_raw$x, unitTo="cm", valueOnly=TRUE),
      y=grid::convertY(edges_raw$y, unitTo="cm", valueOnly=TRUE)
  d_size <- dev.size(units="cm")
    bottom=0 <= min(edges$y),
    top=max(edges$y) <= d_size[2],
    left=0 <= min(edges$x),
    right=max(edges$x) <= d_size[1]

makeContent.text <- function(x) {
  if (!all(no_clipping(x))) {
      "Graphics text is outside of the device: ",
      paste0("'", x$label, "'", collapse=", ")

Code I used for testing:

foo <- grid.text(label="foo bar", x=0.95, y=0.9)
foo <- grid.text(label="foo bar", x=0.9, y=0.9)
foo <- grid.text(label="foo bar", x=0.95, y=0.9, rot=45)
foo <- grid.text(label="foo bar", x=0.96, y=0.9, rot=45)
foo <- grid.text(label="foo bar", x=0.96, y=0.9, rot=80)
foo <- grid.rect(x=0.8, y=0.8, width=0.15, height=0.15, default.units="npc",
just=c(0, 0))
vp <- viewport(angle=45)
foo <- grid.rect(x=0.8, y=0.8, width=0.15, height=0.15, default.units="npc",
just=c(0, 0), vp=vp)

# It also works with ggplot2
data_with_long_names <-
    A=c(paste0(rep(LETTERS, 3), collapse=""), "ab", paste0(rep(letters, 3),

# Feature request: This gives a warning
ggplot(data_with_long_names, aes(x=A, y=B)) +

ggplot(data_with_long_names, aes(x=A, y=B)) +
  geom_point() +
    axis.text.x=element_text(angle=45, hjust=1, vjust=1, size=rel(0.5))

-----Original Message-----
From: Paul Murrell <paul using stat.auckland.ac.nz> 
Sent: Wednesday, September 22, 2021 4:50 PM
To: bill using denney.ws; r-help using r-project.org
Subject: Re: [R] Trying to Learn Details of Grid Graphics, Help Page Errors


The first place you should probably start (given where you are right
now) is this R Journal article ...


In brief, the drawDetails() function has been (almost entirely) superceded
by the makeContent() function.

The best overall reference is probably the "R Graphics" book (3rd edition,
chapts 6, 7, & 8).  Unfortunately, because the first edition came out in
2005, that is an Olde Worlde pay-for-a-print-version book (and probably will
be until something stupid like 50 years after I have gone).  Or maybe you
are lucky and work for a first-world university that has purchased access to
an electronic version.

Thanks for pointing out the problems with the drawDetails() help page; I
will need to fix that.


On 9/23/2021 2:21 AM, bill using denney.ws wrote:
> Hello,
> I'm trying to learn the details of grid graphics. Specifically, I'm 
> trying to create a check that will give a warning or error if text 
> goes outside of the visible plot area. (See
> https://github.com/tidyverse/ggplot2/issues/3282
> <https://github.com/tidyverse/ggplot2/issues/3282>
> for an example of what I
> mean.)
> In my digging, I think that the right way to do this will be to add 
> either a drawDetails, preDrawDetails, or postDrawDetails method for the
"text" class.
> My questions are: Is that the right way to do it or should I be 
> looking elsewhere? Or, is there already a way to do this?
> As I was digging in and trying to learn how to do it, I tried to 
> follow some of the examples from the help page for drawDetails 
> (?drawDetails). But, the suggested functions to review do not exist. 
> Specifically, I wanted to look at grid:::preDrawDetails.frame 
> mentioned in the second paragraph of the Details section of the help page,
and it doesn't exist.
> grid:::drawDetails.xaxis and grid:::postDrawDetails.frame also do not 
> exist (mentioned in the next two paragraphs).
> I would try to make patch, but there is no preDrawDetails or 
> postDrawDetails method in grid that has any content. For drawDetails, 
> there are many choices, and since I'm learning, I'm not sure which 
> would be the best to use as an example.
> Thanks,
> Bill
> [[alternative HTML version deleted]]
> ______________________________________________
> R-help using 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
New Zealand
64 9 3737599 x85392
paul using stat.auckland.ac.nz

More information about the R-help mailing list