[R] Need help with panel.segment..
Marc Schwartz
MSchwartz at MedAnalytics.com
Mon Apr 25 18:37:59 CEST 2005
On Mon, 2005-04-25 at 11:13 -0500, Ghosh, Sandeep wrote:
> Hi All,
>
> For the following code, I'm not sure why the error bars are appearing
> horizontal. Can someone please tell me how to fix the problem.
>
>
> testdata <- as.data.frame(t(structure(c
> (1,2004,"LV1",3.8,2,87,2,2004,"LV1",3.2,3,28,3,2004,"LV1",3.4,3,88,4,2004,"LV1",3,2,26,5,2004,
> "LV1",3.8,2,87,6,2004,"LV1",3.2,3,28,7,2004,"LV1",3.4,3,88,8,2004,"LV1",3,2,26,9,2004,
> "LV1",3.8,2,87,10,2004,"LV1",3.2,3,28,11,2004,"LV1",3.4,3,88,12,2004,"LV1",3,2,26,1,2005,
> "LV1",3.8,2,87,2,2005,"LV1",3.2,3,28,3,2005,"LV1",3.4,3,88,4,2005,"LV1",3,2,26), .Dim=c(6,16))));
> colnames(testdata) <- c('month', 'year',
> 'dataset','mean','stdDev','miceCount');
> testdata[c("month", "mean")] <- lapply(testdata[c("month", "mean")],
> function(x) as.numeric(levels(x)[x]));
> testdata <- testdata[do.call("order", testdata), ];
> trellis.par.set(theme = col.whitebg());
> with(testdata,
> barchart(mean ~ month | year,
> horizontal=FALSE,
> layout=c(1,2),
> origin = 0,
> sd = as.numeric(as.character(stdDev)),
> count = as.numeric(as.character(miceCount)),
> panel = function(x, y, ..., sd, count, subscripts) {
> panel.barchart(x, y, ...)
> sd <- sd[subscripts]
> count <- count[subscripts]
> panel.segments(x - sd / sqrt(count),
> as.numeric(y),
> x + sd / sqrt(count),
> as.numeric(y),
> col = 'red', lwd = 2)
> }))
>
<snip>
The original code that Deepayan provided to you did not have 'horizontal
= FALSE' in the barchart() call.
Thus, by including that in yours, you rotated the chart 90 degrees,
which means that you need to alter the panel.segments call to reflect
that change by transposing the x and y values:
trellis.par.set(theme = col.whitebg())
with(testdata,
barchart(mean ~ month | year,
horizontal=FALSE,
layout=c(1,2),
origin = 0,
sd = as.numeric(as.character(stdDev)),
count = as.numeric(as.character(miceCount)),
panel = function(x, y, ..., sd, count, subscripts) {
panel.barchart(x, y, ...)
sd <- sd[subscripts]
count <- count[subscripts]
# NOTE THE CHANGE HERE
panel.segments(as.numeric(x),
y - sd / sqrt(count),
as.numeric(x),
y + sd / sqrt(count),
col = 'red', lwd = 2)
}))
HTH,
Marc Schwartz
More information about the R-help
mailing list