Re: [R] dotplot, dropping unused levels of 'y'
Deepayan Sarkar wrote: On 9/15/06, Benjamin Tyner [EMAIL PROTECTED] wrote: In dotplot, what's the best way to suppress the unused levels of 'y' on a per-panel basis? This is useful for the case that 'y' is a factor taking perhaps thousands of levels, but for a given panel, only a handfull of these levels ever present. It's a bit problematic. Basically, you can use relation=free/sliced, but y behaves as as.numeric(y) would. So, if the small subset in each panel are always more or less contiguous (in terms of the levels being close to each other) then you would be fine. Otherwise you would not. In that case, you can still write your own prepanel and panel functions, e.g.: - library(lattice) y - factor(sample(1:100), levels = 1:100) x - 1:100 a - gl(9, 1, 100) dotplot(y ~ x | a) p - dotplot(y ~ x | a, scales = list(y = list(relation = free, rot = 0)), prepanel = function(x, y, ...) { yy - y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy }, panel = function(x, y, ...) { yy - y[, drop = TRUE] panel.dotplot(x, yy, ...) }) -- Hope that gives you what you want. Deepayan I've been trying to extend this to allow groups, but am running into a bit of trouble. For example, the following doesn't quite work: (some of the unused factor levels are suppressed per panel, but not all): set.seed(47905) temp3-data.frame(s_port=factor(rpois(100,10)), POSIXtime=structure(1:100,class=c(POSIXt,POSIXct)), l_ipn=factor(rpois(100,10)), duration=runif(100), locality=sample(1:4,replace=TRUE,size=100), l_role=sample(c(-1,1),replace=TRUE,size=100)) plot-dotplot(s_port~POSIXtime|l_ipn, data=temp3, layout=c(1,1), pch=|, col=1:8, duration=temp3$duration, auto.key=list(col=1:8,points=FALSE), groups=locality*l_role, prepanel = function(x, y, ...) { yy - y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy }, panel = panel.superpose, panel.groups = function(x, y, subscripts, duration, col, ...) { yy - y[, drop = TRUE] yy.n - as.numeric(yy) panel.abline(h=yy.n,col=lightgray) panel.xyplot(x=x,y=yy.n,subscripts=subscripts,col=col,...) panel.segments(x, yy.n, x+duration[subscripts], yy.n, col = col) }, scales=list(y=list(relation=free), x=list(rot=45)), xlab=time, ylab=source port) Thanks, Ben __ R-help@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 and provide commented, minimal, self-contained, reproducible code.
Re: [R] dotplot, dropping unused levels of 'y'
On 9/26/06, Benjamin Tyner [EMAIL PROTECTED] wrote: Deepayan Sarkar wrote: On 9/15/06, Benjamin Tyner [EMAIL PROTECTED] wrote: In dotplot, what's the best way to suppress the unused levels of 'y' on a per-panel basis? This is useful for the case that 'y' is a factor taking perhaps thousands of levels, but for a given panel, only a handfull of these levels ever present. It's a bit problematic. Basically, you can use relation=free/sliced, but y behaves as as.numeric(y) would. So, if the small subset in each panel are always more or less contiguous (in terms of the levels being close to each other) then you would be fine. Otherwise you would not. In that case, you can still write your own prepanel and panel functions, e.g.: - library(lattice) y - factor(sample(1:100), levels = 1:100) x - 1:100 a - gl(9, 1, 100) dotplot(y ~ x | a) p - dotplot(y ~ x | a, scales = list(y = list(relation = free, rot = 0)), prepanel = function(x, y, ...) { yy - y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy }, panel = function(x, y, ...) { yy - y[, drop = TRUE] panel.dotplot(x, yy, ...) }) -- Hope that gives you what you want. Deepayan I've been trying to extend this to allow groups, but am running into a bit of trouble. For example, the following doesn't quite work: (some of the unused factor levels are suppressed per panel, but not all): I don't think panel = panel.superpose is enough. Try panel = function(x, y, ...) { yy - y[, drop = TRUE] yy.n - as.numeric(yy) panel.superpose(x, yy.n, ...) }, panel.groups = function(x, y, subscripts, duration, col, ...) { panel.abline(h = y, col = lightgray) panel.xyplot(x, y, col = col, ...) panel.segments(x, y, x + duration[subscripts], y, col = col) }, -Deepayan set.seed(47905) temp3-data.frame(s_port=factor(rpois(100,10)), POSIXtime=structure(1:100,class=c(POSIXt,POSIXct)), l_ipn=factor(rpois(100,10)), duration=runif(100), locality=sample(1:4,replace=TRUE,size=100), l_role=sample(c(-1,1),replace=TRUE,size=100)) plot-dotplot(s_port~POSIXtime|l_ipn, data=temp3, layout=c(1,1), pch=|, col=1:8, duration=temp3$duration, auto.key=list(col=1:8,points=FALSE), groups=locality*l_role, prepanel = function(x, y, ...) { yy - y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy }, panel = panel.superpose, panel.groups = function(x, y, subscripts, duration, col, ...) { yy - y[, drop = TRUE] yy.n - as.numeric(yy) panel.abline(h=yy.n,col=lightgray) panel.xyplot(x=x,y=yy.n,subscripts=subscripts,col=col,...) panel.segments(x, yy.n, x+duration[subscripts], yy.n, col = col) }, scales=list(y=list(relation=free), x=list(rot=45)), xlab=time, ylab=source port) Thanks, Ben __ R-help@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 and provide commented, minimal, self-contained, reproducible code.
[R] dotplot, dropping unused levels of 'y'
In dotplot, what's the best way to suppress the unused levels of 'y' on a per-panel basis? This is useful for the case that 'y' is a factor taking perhaps thousands of levels, but for a given panel, only a handfull of these levels ever present. Thanks, Ben __ R-help@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 and provide commented, minimal, self-contained, reproducible code.
Re: [R] dotplot, dropping unused levels of 'y'
Benjamin Tyner said the following on 9/15/2006 2:36 PM: In dotplot, what's the best way to suppress the unused levels of 'y' on a per-panel basis? This is useful for the case that 'y' is a factor taking perhaps thousands of levels, but for a given panel, only a handfull of these levels ever present. Thanks, Ben __ R-help@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 and provide commented, minimal, self-contained, reproducible code. Hi, Ben, Use scales(x = list(relation = free)) in your call to dotplot: library(lattice) z - data.frame(x = rep(LETTERS[1:20], each = 4), y = 1:80, g = gl(4, 20)) dotplot(y ~ x | g, z, scales = list(x = list(relation = free))) HTH, --sundar __ R-help@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 and provide commented, minimal, self-contained, reproducible code.
Re: [R] dotplot, dropping unused levels of 'y'
On 9/15/06, Benjamin Tyner [EMAIL PROTECTED] wrote: In dotplot, what's the best way to suppress the unused levels of 'y' on a per-panel basis? This is useful for the case that 'y' is a factor taking perhaps thousands of levels, but for a given panel, only a handfull of these levels ever present. It's a bit problematic. Basically, you can use relation=free/sliced, but y behaves as as.numeric(y) would. So, if the small subset in each panel are always more or less contiguous (in terms of the levels being close to each other) then you would be fine. Otherwise you would not. In that case, you can still write your own prepanel and panel functions, e.g.: - library(lattice) y - factor(sample(1:100), levels = 1:100) x - 1:100 a - gl(9, 1, 100) dotplot(y ~ x | a) p - dotplot(y ~ x | a, scales = list(y = list(relation = free, rot = 0)), prepanel = function(x, y, ...) { yy - y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy }, panel = function(x, y, ...) { yy - y[, drop = TRUE] panel.dotplot(x, yy, ...) }) -- Hope that gives you what you want. Deepayan __ R-help@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 and provide commented, minimal, self-contained, reproducible code.