[R] Lattice dotplot with symbols sized and colored

Deepayan Sarkar deepayan at stat.wisc.edu
Tue May 3 15:30:17 CEST 2005


On Tuesday 03 May 2005 06:39, David Kidd wrote:
> Sundar suggested setting up a theme which I have done...
>
> my.theme <- function() {
>    theme <- col.whitebg()
>    symb <- theme$superpose.symbol
>    symb$col=
> c("red","blue","green","yellow","orange","black","purple") #symb$pch
> is c(1,3,6,0,5,16,17) by default for col.whitebg
> theme$superpose.symbol <- symb
>    theme
> }
> trellis.par.set(theme = my.theme())
> # from ?dotplot
> dotplot(sporder ~ cvarorder | direct, data=sp.nc.bdrs.data,
> groups = sp.nc.bdrs.data$mysign,
> cex=abs(sp.nc.bdrs.data$mwZ * 0.05),
> xlab="climate variables",
> ylab="species",
> scales = list(y = list(labels = as.character(spname),at = 1:12, cex =
> 0.5), x = list(labels = as.character(my.ylabel), at = 1:66, rot=90,
> cex = 0.5), alternating = 3))
>
>
> Now if I am understanding lattice correctly setting symb$cex sets the
> size multiplier for symbols within each group but does not support
> the differential sizing of symbols for each record independently
> within each group. Hence I have tried to use a 'global' cex (after
> the groups statement), however, this has no effect on the displayed
> symbol size. Do I need to change the pch or another parameter to draw
> sized filled circles as is the default symbol for dotplot?

Yes, canned features of lattice are not enough for this. Here's 
something that should work:

with(sp.nc.bdrs.data,
     dotplot(sporder ~ cvarorder | direct, 
             col.var = factor(mysign),
             cex.var = abs(mwZ),
             col = c('green', 'red'),
             panel = function(x, y, cex, col, cex.var, col.var,
                              subscripts, ...) {
                 panel.dotplot(x, y,
                               col = col[col.var[subscripts]],
                               cex = cex.var[subscripts] * 0.05, ...)
             }))

Here's a version with the barley data (not a very good example, though):

with(barley,
     dotplot(site ~ yield, 
             col.var = factor(year),
             cex.var = yield,
             col = c('green', 'red'),
             panel = function(x, y, cex, col, cex.var, col.var,
                              subscripts, ...) {
                 panel.dotplot(x, y,
                               col = col[col.var[subscripts]],
                               cex = cex.var[subscripts] * 0.03, ...)
             }))

Deepayan




More information about the R-help mailing list