Sebastian Luque
2006-Jul-07 15:33 UTC
[R] dotplot (lattice) with panel.segments and groups
Hi, The following produces almost exactly what I needed. The problems are that the 'panel.dotplot' call (commented) generates the error 'Error in NextMethod("[") : argument "subscripts" is missing, with no default'. The other problem is that the colors alternate between the levels of the 'site' variable, rather than 'year'. barley$yield2 <- with(barley, yield + 5) dotplot(site ~ yield | variety, data=barley, groups=year, yield2=barley$yield2, col=c("gray", "black"), panel=function(x, y, subscripts, yield2, ...) { ## panel.dotplot(x, y, ...) panel.segments(x, as.numeric(y), yield2[subscripts], as.numeric(y), ...) }) R> sessionInfo() Version 2.3.1 (2006-06-01) i486-pc-linux-gnu attached base packages: [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" [7] "base" other attached packages: chron gmodels lattice "2.3-3" "2.12.0" "0.13-8" Can somebody please suggest how to properly make that 'panel.dotplot' call and set the 'col' argument? Thanks in advance. Cheers, -- Seb
Gabor Grothendieck
2006-Jul-07 16:15 UTC
[R] dotplot (lattice) with panel.segments and groups
It seems to work if you handle the col= argument explicitly. Suggest you double check this since I have not carefully done so: barley$yield2 <- with(barley, yield + 5) dotplot(site ~ yield | variety, data=barley, groups=year, yield2=barley$yield2, col=c("gray", "black"), panel=function(x, y, subscripts, groups, yield2, col, ...) { panel.dotplot(x, y, ...) panel.segments(x, as.numeric(y), yield2[subscripts], as.numeric(y), col = col[groups[subscripts]], ...) }) On 7/7/06, Sebastian Luque <spluque at gmail.com> wrote:> Hi, > > The following produces almost exactly what I needed. The problems are > that the 'panel.dotplot' call (commented) generates the error 'Error in > NextMethod("[") : argument "subscripts" is missing, with no default'. The > other problem is that the colors alternate between the levels of the 'site' > variable, rather than 'year'. > > > barley$yield2 <- with(barley, yield + 5) > > dotplot(site ~ yield | variety, data=barley, groups=year, > yield2=barley$yield2, col=c("gray", "black"), > panel=function(x, y, subscripts, yield2, ...) { > ## panel.dotplot(x, y, ...) > panel.segments(x, as.numeric(y), > yield2[subscripts], as.numeric(y), ...) > }) > > R> sessionInfo() > Version 2.3.1 (2006-06-01) > i486-pc-linux-gnu > > attached base packages: > [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" > [7] "base" > > other attached packages: > chron gmodels lattice > "2.3-3" "2.12.0" "0.13-8" > > > Can somebody please suggest how to properly make that 'panel.dotplot' call > and set the 'col' argument? Thanks in advance. > > > Cheers, > > -- > Seb > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
Deepayan Sarkar
2006-Jul-07 18:53 UTC
[R] dotplot (lattice) with panel.segments and groups
On 7/7/06, Sebastian Luque <spluque at gmail.com> wrote:> Hi, > > The following produces almost exactly what I needed. The problems are > that the 'panel.dotplot' call (commented) generates the error 'Error in > NextMethod("[") : argument "subscripts" is missing, with no default'.It's just as it says: panel.dotplot wants a 'subscripts' argument when 'groups' is not null, and you have forgotten to give it one.> The > other problem is that the colors alternate between the levels of the 'site' > variable, rather than 'year'.It's doing what it's being told to do. You probably want something like dotplot(site ~ yield | variety, data=barley, groups=year, yield2=barley$yield2, col=c("gray", "black"), panel = panel.superpose, panel.groups = function(x, y, subscripts, yield2, col, ...) { panel.xyplot(x, y, col = col, ...) panel.segments(x, y, yield2[subscripts], y, col = col) }) Note that you don't want to use panel.dotplot here as it would draw a reference line both times. If you do want a reference line, add that in the panel function. The explicit use of 'col' should not have been necessary, i.e., the following should have worked: dotplot(site ~ yield | variety, data=barley, groups=year, yield2=barley$yield2, col=c("gray", "black"), panel = panel.superpose, panel.groups = function(x, y, subscripts, yield2, ...) { panel.xyplot(x, y, col = ...) panel.segments(x, y, yield2[subscripts], y, ...) }) I believe this doesn't work because of a grid bug. I'll take that up in a separate thread. -Deepayan> > > barley$yield2 <- with(barley, yield + 5) > > dotplot(site ~ yield | variety, data=barley, groups=year, > yield2=barley$yield2, col=c("gray", "black"), > panel=function(x, y, subscripts, yield2, ...) { > ## panel.dotplot(x, y, ...) > panel.segments(x, as.numeric(y), > yield2[subscripts], as.numeric(y), ...) > }) > > R> sessionInfo() > Version 2.3.1 (2006-06-01) > i486-pc-linux-gnu > > attached base packages: > [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" > [7] "base" > > other attached packages: > chron gmodels lattice > "2.3-3" "2.12.0" "0.13-8" > > > Can somebody please suggest how to properly make that 'panel.dotplot' call > and set the 'col' argument? Thanks in advance.
Reasonably Related Threads
- dotplot points color
- how to add a vertical line for each panel in a lattice dotplot with log scale?
- lattice dotplot labelling median and mean values for each panel
- Dotplot (package Hmisc) with groups: colours and symbols
- color of error bars in Dotplot (Hmisc)