[R] Leading in line-wrapped Lattice axis value and panel labels
Paul Murrell
p.murrell at auckland.ac.nz
Thu Sep 8 00:11:48 CEST 2005
Hi
Tim Churches wrote:
> Paul Murrell wrote:
>
>> Hi
>>
>> Deepayan Sarkar wrote:
>> > On 9/7/05, Tim Churches <tchur at optushome.com.au> wrote:
>> >
>> >> Version 2.1.1 Platforms: all
>> >>
>> >> What is the trellis parameter (or is there a trellis parameter) to
>> >> set the leading (the gap between lines) when long axis values
>> >> labels or panel header labels wrap over more than one line? By
>> >> default, there is a huge gap between lines, and much looking and
>> >> experimentation has not revealed to me a suitable parameter to
>> >> adjust this.
>> >>
>> >
>> > There is none. Whatever grid.text does happens.
>>
>> grid does have a "lineheight" graphical parameter. For example,
>>
>> library(grid)
>> grid.text("line one\nlinetwo",
>> x=rep(1:3/4, each=3),
>> y=rep(1:3/4, 3),
>> gp=gpar(lineheight=1:9/2))
>>
>> Could you add this in relevant places in trellis.par Deepayan?
>>
> Is there a work around we could use in the meantime, or should we
> attempt to hack trellis.par as per Paul's suggestion (gulp!)? I suppose
> that is like asking "Should we attempt to climb Teichelmann?" - it
> depends... We have increased the depth of the panel headers, but this
> wastes plotting area and the tops of the tees and effs on the upper line
> and the bottoms of the gees and whys on the bottom line are still cut
> off, so large is the gap between the two lines. And increasing the
> panel header depth it doesn't help with y-axis labels - typically the
> second line of one label will abut the first line of the next label,
> giving a results which is rather like:
>
> Value
> -
> One
> Value
> -
> Two
> Value
> -
> Three
> Value
> -
> Four
>
> where the actual value labels are "Value One", "Value Two" etc and the
> "-" are the tick marks. Less than ideal.
>
> Suggestions for interim fixes (other than using abbreviated labels...
> we've thought of that) most welcome.
I don't think lattice explicitly sets lineheight so you could try
something like the following (push a [full-page] grid viewport that sets
lineheight then draw lattice plot within that) ...
library(grid)
library(lattice)
states <- data.frame(state.x77,
state.name = dimnames(state.x77)[[1]],
state.region = factor(state.region))
levels(states$state.region) <-
c("Northeast", "South", "North\n Central", "West")
xyp <- xyplot(Murder ~ Population | state.region, data = states,
groups = as.character(state.name),
panel = function(x, y, subscripts, groups)
ltext(x = x, y = y, label = groups[subscripts], srt = -50,
col = "blue",
cex=.9, fontfamily = "HersheySans"),
par.strip.text = list(cex = 1.3, font = 4, col = "brown",
lines = 2),
xlab = "Estimated Population\nJuly 1, 1975",
ylab = "Murder Rate \n(per 100,000 population)\n 1976",
main = "Murder Rates in US states")
# default line height for comparison
print(xyp)
# control line height
grid.newpage()
pushViewport(viewport(gp=gpar(lineheight=0.8)))
print(xyp, newpage=FALSE)
popViewport()
... this does not work perfectly for me, but I'm not sure (yet) whether
that is a problem in grid, a problem in lattice, or a problem with
Hershey fonts (that are used in this example) so your mileage may vary.
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/
More information about the R-help
mailing list