On Tue, Mar 31, 2009 at 8:57 AM, Dieter Menne <dieter.me...@menne-biomed.de> wrote: > R User R User <ruser2008 <at> googlemail.com> writes: > >> I'm using the cloud function to plot the iris data as per the document: >> http://www.stat.ucl.ac.be/ISpersonnel/lecoutre/stats/fichiers/_gallery.pdf >> >> I'd like to change the point size to reflect a fourth variable, as done here >> http://www.cis.hut.fi/projects/somtoolbox/download/pics2/shotvs2_origdata.png >> >> Does anybody know how to do this? There doesn't seem to be an option in >> cloud() >> > > My first idea was to add > cex = iris$PetalLength, > > which failed, taking the first value of cex only. In panel.3dscatter > I found the line > > cex <- rep(cex, length.out = n) > > Which looks like cex is not vectored.
How so? panel.3dscatter() in fact goes to some lengths to be vectorized: 'n' is the number of points being plotted, and 'cex' is replicated to be equally long here. This is needed so that the 'cex' values can later be reordered in the same way as the points being plotted (by decreasing depth). The following should work: cloud(Sepal.Length ~ Petal.Length * Petal.Width, data = iris, pch = 1, cex = with(iris, 3 * Sepal.Width / max(Sepal.Width))) One caveat is that this will not work in a multi-panel plot. In that case, a custom panel function will need to create a suitable subset of 'cex' (cex[subscripts]) before calling panel.3dscatter(). -Deepayan > So my approach would be to make > a copy of panel.3dscatter and do the correct cex replacement there. > > I might be wrong, however, Deepayan has the last say. > > Dieter ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.