Apologies if this is a naive beginners question. I am trying to create a dotplot with the lattice dotplot function in which my dots are colored differently depending on if positive or negative and sized by sp.nc.bdrs.data$mwZ I have tried... dotplot(sporder ~ cvarorder | direct, data=sp.nc.bdrs.data, cex=abs(sp.nc.bdrs.data$mwZ * 0.05), xlab="climate variables", ylab="species",col= sp.nc.bdrs.data$mysign, 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)) This sizes my symbols correctly but colors all four conditional plots (direct = 'e', 'n', 's' & 'w') using the colors defined for the first direct condition (i.e. 'e'). I have also tried using 'groups' to set the colors, however, whenever I do this I cannot get cex to then size the symbols - I get open circles that do not scale. This problem also happens when I try setting up a panel function. Many Thanks ---------------------------------------------------------------------------------------------- David M. Kidd Research Assistant School of Biology Room 210, Sir Harold Mitchell Building University of St. Andrews St. Andrews, Fife KY16 9TH UK http://www.st-and.ac.uk/~bugs/dave/dave.htm Tel: +44 (0)1334 463348 Fax: +44 (0)1334 463600
David Kidd wrote on 5/3/2005 3:08 AM:> > Apologies if this is a naive beginners question. > > I am trying to create a dotplot with the lattice dotplot function in > which my dots are colored differently depending on if positive or > negative and sized by sp.nc.bdrs.data$mwZ > > I have tried... > > dotplot(sporder ~ cvarorder | direct, data=sp.nc.bdrs.data, > cex=abs(sp.nc.bdrs.data$mwZ * 0.05), > xlab="climate variables", > ylab="species",col= sp.nc.bdrs.data$mysign, > 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)) > > This sizes my symbols correctly but colors all four conditional plots > (direct = 'e', 'n', 's' & 'w') using the colors defined for the first > direct condition (i.e. 'e'). > > I have also tried using 'groups' to set the colors, however, whenever I > do this I cannot get cex to then size the symbols - I get open circles > that do not scale. This problem also happens when I try setting up a > panel function. > > Many Thanks > > > >Hi David, I think you're on the right track using groups. However, you just have to set the trellis arguments correctly. For example, library(lattice) my.theme <- function() { theme <- col.whitebg() symb <- theme$superpose.symbol symb$cex <- seq(0.5, 1.5, length = length(symb$cex)) # 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(variety ~ yield | year, data = barley, groups = site) It's not necessary to create a theme. You can accomplish the same just using trellis.par.get and trellis.par.set. The above is just my personal preference. HTH, --sundar
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?
Thanks
Dave
----------------------------------------------------------------------------------------------
David M. Kidd
Research Assistant
School of Biology
Room 210, Sir Harold Mitchell Building
University of St. Andrews
St. Andrews, Fife
KY16 9TH
UK
http://www.st-and.ac.uk/~bugs/dave/dave.htm
Tel: +44 (0)1334 463348
Fax: +44 (0)1334 463600
Thank you very much Deepayan your code produces a beautiful plot. ---------------------------------------------------------------------------------------------- David M. Kidd Research Assistant School of Biology Room 210, Sir Harold Mitchell Building University of St. Andrews St. Andrews, Fife KY16 9TH UK http://www.st-and.ac.uk/~bugs/dave/dave.htm Tel: +44 (0)1334 463348 Fax: +44 (0)1334 463600