Hello, I am attempting to write a script that adds error bars to a barchart. I basing my attempt heavily on the following thread: http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2791.html I can't seem to get around the problem that was discussed in the thread. The following example should illustrate my problem. Sorry about the messy example but I am 1) trying to make it as close as possible to my actual work and 2) my skill level is spotty at best. Can anyone suggest a way to do this or even another way to make a grouped barchart with error bars? I'm not married to this method although I prefer working with lattice. Thanks for any help in advance! Sam #Generating the data library(lattice) temp <- abs(rnorm(81*5)) err <- as.data.frame(temp) err$section=c("down","down","down","mid","mid","mid", "up","up", "up") err$depth=c("Surface","D50", "2xD50") err$err.date=c("05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","28/08/2009", "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009") err.split <- with(err, split(temp, list(depth,section, err.date))) #I've tried to alter the panel function according to the thread to produce vertical error bars in my barcharts prepanel.ci <- function(x, y, ly, uy, subscripts, ...) { y <- as.numeric(y) ly <- as.numeric(ly[subscripts]) uy <- as.numeric(uy[subscripts]) list(ylim = range(y, uy, ly, finite = TRUE)) } panel.ci <- function(x, y, lx, ux, subscripts, pch = 16, ...) { x <- as.numeric(x) y <- as.numeric(y) lx <- as.numeric(lx[subscripts]) ux <- as.numeric(ux[subscripts]) panel.arrows(x, ly, x, uy, col = 'black', length = 0.25, unit = "native", angle = 90, code = 3) panel.barchart(x, y, pch = pch, ...) } se <-function(x) sqrt(var(x)/length(x)) err.ucl <- sapply(err.split, function(x) { st <- boxplot.stats(x) c(mean(x), mean(x) + se(x), mean(x) -se(x)) }) err.ucl <- as.data.frame(t(err.ucl)) names(err.ucl) <- c("mean", "upper.se", "lower.se") err.ucl$label <- factor(rownames(err.ucl),levels = rownames(err.ucl)) # add factor, grouping and by variables err.ucl$section=c("down","down","down","mid","mid","mid", "up","up", "up") err.ucl$depth=c("Surface","D50", "2xD50") #There has got to be a better way of doing this err.ucl$err.date=c("05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","28/08/2009", "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009") #This produces the figure I am looking for minus the error bars. with(err.ucl, barchart(mean ~ err.date | section, group=depth, layout=c(1,3), horizontal=FALSE, scales=list(x=list(rot=45)), )) # Deepayan's original example. I am unsure how to diagnose the packet error. This is where I run into problems with(err.ucl, barchart(mean ~ err.date | section, group=depth, layout=c(1,3), horizontal=FALSE, scales=list(x=list(rot=45)), ly=lower.se, uy=upper.se, prepanel=prepanel.ci, panel=panel.superpose, panel.groups=panel.ci )) -- ***************************************************** Sam Albers Geography Program University of Northern British Columbia 3333 University Way Prince George, British Columbia Canada, V2N 4Z9 phone: 250 960-6777 ***************************************************** [[alternative HTML version deleted]]
Hi Sam and everybody, Can you educate me a little bit on the use of barchart? A command like this barchart(~table(someProperty), data=A) produces a barchart with horizontal bars. I want to produce that graph but with VERTICAL bars. clearly, horizontal=FALSE does not work. Thank you, Ivan> sessionInfo()R version 2.10.0 (2009-10-26) x86_64-redhat-linux-gnu locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=C LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] lattice_0.18-3 loaded via a namespace (and not attached): [1] grid_2.10.0 Ivan Gregoretti, PhD National Institute of Diabetes and Digestive and Kidney Diseases National Institutes of Health 5 Memorial Dr, Building 5, Room 205. Bethesda, MD 20892. USA. Phone: 1-301-496-1592 Fax: 1-301-496-9878 On Fri, Feb 19, 2010 at 7:22 PM, Sam Albers <tonightsthenight at gmail.com> wrote:> Hello, > > I am attempting to write a script that adds error bars to a barchart. I > basing my attempt heavily on the following thread: > > http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2791.html > > I can't seem to get around the problem that was discussed in the thread. The > following example should illustrate my problem. Sorry about the messy > example but I am 1) trying to make it as close as possible to my actual work > and 2) my skill level is spotty at best. Can anyone suggest a way to do this > or even another way to make a grouped barchart with error bars? I'm not > married to this method although I prefer working with lattice. Thanks for > any help in advance! > > Sam > > #Generating the data > library(lattice) > > temp <- abs(rnorm(81*5)) > err <- as.data.frame(temp) > err$section=c("down","down","down","mid","mid","mid", "up","up", "up") > > err$depth=c("Surface","D50", "2xD50") > > err$err.date=c("05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","28/08/2009", > "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", > "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009") > > > err.split <- > ? ? with(err, > ? ? ? ? ?split(temp, list(depth,section, err.date))) > > #I've tried to alter the panel function according to the thread to produce > vertical error bars in my barcharts > > prepanel.ci <- function(x, y, ly, uy, subscripts, ...) { > > ? ? ? ?y <- as.numeric(y) > ? ? ? ?ly <- as.numeric(ly[subscripts]) > ? ? ? ? uy <- as.numeric(uy[subscripts]) > ? ? ? ? list(ylim = range(y, uy, ly, finite = TRUE)) > ? ? } > > panel.ci <- function(x, y, lx, ux, subscripts, pch = 16, ...) { > ? ? ? ? x <- as.numeric(x) > ? ? ? ? y <- as.numeric(y) > ? ? ? ? lx <- as.numeric(lx[subscripts]) > ? ? ? ? ux <- as.numeric(ux[subscripts]) > > ? ? ? ? panel.arrows(x, ly, x, uy, col = 'black', > ? ? ? ? ? ? ? ? ?length = 0.25, unit = "native", > ? ? ? ? ? ? ? ? ?angle = 90, code = 3) > ? ? ? ? panel.barchart(x, y, pch = pch, ...) > ? ? } > > se <-function(x) sqrt(var(x)/length(x)) > > > > err.ucl <- sapply(err.split, > ? ? ? ? ? ?function(x) { > ? ? ? ? ? ? ? ?st <- boxplot.stats(x) > ? ? ? ? ? ? ? ?c(mean(x), mean(x) + se(x), mean(x) -se(x)) > ? ? ? ? ? ?}) > > > > err.ucl <- as.data.frame(t(err.ucl)) > names(err.ucl) <- c("mean", "upper.se", "lower.se") > err.ucl$label <- factor(rownames(err.ucl),levels = rownames(err.ucl)) > > # add factor, grouping and by variables > err.ucl$section=c("down","down","down","mid","mid","mid", "up","up", "up") > err.ucl$depth=c("Surface","D50", "2xD50") > > #There has got to be a better way of doing this > err.ucl$err.date=c("05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/09/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","05/10/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","12/09/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","13/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","19/10/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","21/09/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","26/10/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","27/09/2009","28/08/2009", > "28/08/2009", "28/08/2009","28/08/2009", "28/08/2009", > "28/08/2009","28/08/2009", "28/08/2009", "28/08/2009") > > #This produces the figure I am looking for minus the error bars. > > with(err.ucl, barchart(mean ~ err.date | section, group=depth, > ? ? ? ?layout=c(1,3), > ? ? ? ? horizontal=FALSE, > ? ? ? ? scales=list(x=list(rot=45)), > ? ? ? ?)) > > > # Deepayan's original example. I am unsure how to diagnose the packet error. > This is where I run into problems > > with(err.ucl, barchart(mean ~ err.date | section, group=depth, > ? ? ? ? layout=c(1,3), > ? ? ? ? horizontal=FALSE, > ? ? ? ? scales=list(x=list(rot=45)), > ? ? ? ? ly=lower.se, > ? ? ? ? uy=upper.se, > ? ? ? ? prepanel=prepanel.ci, > ? ? ? ? panel=panel.superpose, > ? ? ? ? panel.groups=panel.ci > ? ? ? ? )) > > > > > > -- > ***************************************************** > Sam Albers > Geography Program > University of Northern British Columbia > 3333 University Way > Prince George, British Columbia > Canada, V2N 4Z9 > phone: 250 960-6777 > ***************************************************** > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >
On 8 April 2010 06:03, Ivan Gregoretti <ivangreg at gmail.com> wrote:> Hi Sam and everybody, > > Can you educate me a little bit on the use of barchart? > > A command like this > > barchart(~table(someProperty), data=A) > > produces a barchart with horizontal bars.That should be barchart(table(someProperty), data=A) (the method for objects of class "table")> I want to produce that graph but with VERTICAL bars. > > clearly, horizontal=FALSE does not work.and you will find that horizontal = FALSE does work. -- Felix Andrews / ??? Postdoctoral Fellow Integrated Catchment Assessment and Management (iCAM) Centre Fenner School of Environment and Society [Bldg 48a] The Australian National University Canberra ACT 0200 Australia M: +61 410 400 963 T: + 61 2 6125 4670 E: felix.andrews at anu.edu.au CRICOS Provider No. 00120C -- http://www.neurofractal.org/felix/
On 20 February 2010 11:22, Sam Albers <tonightsthenight at gmail.com> wrote:> #I've tried to alter the panel function according to the thread to produce > vertical error bars in my barcharts > > prepanel.ci <- function(x, y, ly, uy, subscripts, ...) { > > ? ? ? ?y <- as.numeric(y) > ? ? ? ?ly <- as.numeric(ly[subscripts]) > ? ? ? ? uy <- as.numeric(uy[subscripts]) > ? ? ? ? list(ylim = range(y, uy, ly, finite = TRUE)) > ? ? } > > panel.ci <- function(x, y, lx, ux, subscripts, pch = 16, ...) { > ? ? ? ? x <- as.numeric(x) > ? ? ? ? y <- as.numeric(y) > ? ? ? ? lx <- as.numeric(lx[subscripts]) > ? ? ? ? ux <- as.numeric(ux[subscripts]) > > ? ? ? ? panel.arrows(x, ly, x, uy, col = 'black', > ? ? ? ? ? ? ? ? ?length = 0.25, unit = "native", > ? ? ? ? ? ? ? ? ?angle = 90, code = 3) > ? ? ? ? panel.barchart(x, y, pch = pch, ...) > ? ? } >> # Deepayan's original example. I am unsure how to diagnose the packet error. > This is where I run into problemsWell, when the error message says "argument 'lx' is missing, with no default", it really means that argument 'lx' is missing, with no default. Your panel function has an argument 'lx', which you forgot to change to 'ly' as you did with the prepanel function. Hope that helps...> with(err.ucl, barchart(mean ~ err.date | section, group=depth, > ? ? ? ? layout=c(1,3), > ? ? ? ? horizontal=FALSE, > ? ? ? ? scales=list(x=list(rot=45)), > ? ? ? ? ly=lower.se, > ? ? ? ? uy=upper.se, > ? ? ? ? prepanel=prepanel.ci, > ? ? ? ? panel=panel.superpose, > ? ? ? ? panel.groups=panel.ci > ? ? ? ? )) >-- Felix Andrews / ??? Postdoctoral Fellow Integrated Catchment Assessment and Management (iCAM) Centre Fenner School of Environment and Society [Bldg 48a] The Australian National University Canberra ACT 0200 Australia M: +61 410 400 963 T: + 61 2 6125 4670 E: felix.andrews at anu.edu.au CRICOS Provider No. 00120C -- http://www.neurofractal.org/felix/