[R] text length in grid

Paul Murrell p.murrell at auckland.ac.nz
Tue Jun 29 01:42:21 CEST 2004


Hi

Here's one way to do it:

fitText <- function(text) {
   tw <- convertWidth(stringWidth(text), "inches", valueOnly=TRUE)
   vw <- convertWidth(unit(1, "npc"), "inches", valueOnly=TRUE)
   cex <- vw/tw
   grid.text(text, gp=gpar(cex=cex))
}

pushViewport(viewport(layout = grid.layout(5, 2, c(9,1), 1:5)))
for (i in 1:5) {
   pushViewport(viewport(layout.pos.row = i, layout.pos.col = 1))
   pushViewport(viewport(x = 0, width = i/5, height = .8, just = "left"))
   grid.rect(gp = gpar(fill = rainbow(5)[i]))
   grid.yaxis(main = F)
   fitText("I am some descriptive text.")
   popViewport()
   popViewport()
}

This should be ok for producing a fixed-size graphic, but if you change 
the size of the device (e.g., resize the window), the calculations will 
become incorrect.  There are ways around that;  let me know if you want 
to know more.

Paul


kevin bartz wrote:
> Hello! I first would like to compliment the authors of grid on what has been
> a wonderfully useful package for me. Now, my question: Is there any way I
> can specify the size of some grid.text using grid units?
> 
> I must label the regions of a plot. The regions can be either very small or
> very large, so I would like to label each by fitting its text to the size of
> the region in question. Ideally, I could have nice, big text labeling the
> big regions and tiny type in the small regions.
> 
> Let me try to illustrate my scenario. Imagine that my plot looks like this:
> 
> pushViewport(viewport(layout = grid.layout(5, 2, c(9,1), 1:5)))
> for (i in 1:5) {
>   pushViewport(viewport(layout.pos.row = i, layout.pos.col = 1))
>   pushViewport(viewport(x = 0, width = i/5, height = .8, just = "left"))
>   grid.rect(gp = gpar(fill = rainbow(5)[i]))
>   grid.yaxis(main = F)
>   grid.text("I am some descriptive text.")
>   popViewport()
>   popViewport()
> }
> 
> Unfortunately, the descriptive text overlaps with the axis for the red
> rectangle! Is there any way, given the dimensions of some region on the grid
> and the desired text, that I can fit this text to the region?
> 
> Sorry if I missed something in the documentation. I really did look at
> ?grid.text, all the documentation for the grid package, all the PDFs posted
> on the grid page as well as previous r-help postings, but none seemed to
> address this question. Thanks so much for any help you can provide!
> 
> Kevin
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html


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




More information about the R-help mailing list