(I know that you said your post may already be "out of date", but ...) " Despite additional reading of barchart() examples and help pages I'm still missing how to get grouping working and use the years in the dataframe as labels on the x-axis." But ?barchart says: "Formally, if groups is specified, then groups along with subscripts is passed to the panel function, ..." which, as I already told you, means you should consult ?panel.barchart . In particular, the example therein tells you exactly how the "groups" argument should be specified and how it works (you can change colors via the "col" argument, of course). Note, in particular, that "groups" must be your grouping variable, which means, in particular, that you need to reformat your data frame in what is currently referred to as "tidy" format (aka "long" format as opposed to "wide") -- one variable per column, one observation per row. That is: Year Value Summary.Type 1991 91.24 "Med" 1991 92.89 "Max" ... etc. .... groups = Summary.Type, ... in your call will then do the job. As an aside, this is a good example of why you should adhere to this format for data analysis in R. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Wed, Aug 22, 2018 at 10:34 AM Rich Shepard <rshepard at appl-ecosys.com> wrote:> On Wed, 22 Aug 2018, Rich Shepard wrote: > > > Correcting the barchard() command fixed the main issue; getting the > second > > set of bars is still eluding me, but I'll continue working on fixing > this. > > I'll get the years as the x-axis labels rather than year number in > > sequence from 1 to 29. > > Despite additional reading of barchart() examples and help pages I'm > still > missing how to get grouping working and use the years in the dataframe as > labels on the x-axis. > > The most recent command version (on the dput output in my previous > message) is: > > med_max <- barchart(stage_heights$Med ~ stage_heights$Year, > horizontal=FALSE, col = 'black', > main = 'Median and Maximum Stage Heights\nUSGS Gauge', > ylab = 'Elevation (masl)', xlab = 'Year', groups=TRUE, > beside=TRUE, panel = "panel.superbar", prepanel > "prepanel.superbar",) > print(med_max) > > I don't think that conditioning into a trellis applies to this barchart > and I'm not relating the use of scales and labels in a conditioned plot to > the barchart. > > The above command yields an error and I've not found the explanation for > it: > > Error in get(fun, mode = "function", envir = parent.frame()) : > object 'panel.superbar' of mode 'function' was not found > > so I'm definitely not getting the command syntax correct. Help's still > needed. > > Rich > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
On Wed, 22 Aug 2018, Bert Gunter wrote:> (I know that you said your post may already be "out of date", but ...)Bert, Still reading ?xyplot/?barchart.> But ?barchart says: > "Formally, if groups is specified, then groups along with subscripts is > passed to the panel function, ..." > > which, as I already told you, means you should consult ?panel.barchart . In > particular, the example therein tells you exactly how the "groups" argument > should be specified and how it works (you can change colors via the "col" > argument, of course). Note, in particular, that "groups" must be your > grouping variable, which means, in particular, that you need to reformat > your data frame in what is currently referred to as "tidy" format (aka > "long" format as opposed to "wide") -- one variable per column, one > observation per row. That is: > > Year Value Summary.Type > 1991 91.24 "Med" > 1991 92.89 "Max" > ... etc.I saw this in examples and missed its application to my data. You've cleared my confusion and now I _do_ understand the need for a separate grouping column and reshaping to a long format. Thanks for explaining so effectively.> As an aside, this is a good example of why you should adhere to this > format for data analysis in R.I've done this with all my other data sets and have no excuse for not doing so with this one. Mea culpa! Best regards, Rich
On Wed, 22 Aug 2018, Bert Gunter wrote:> .... groups = Summary.Type, ... > in your call will then do the job. > > As an aside, this is a good example of why you should adhere to this format > for data analysis in R.Bert, Progress and retreat. I'm putting this aside for a day or so because I need to provide my client with a draft report and I can add this plot later when I figure out how to do it correctly. More when I have results. Thanks again, Rich
On Wed, 22 Aug 2018, Rich Shepard wrote:> More when I have results.Almost there. I've read the auto.key section in ?barchart and looked at examples from stackoverflow on the web without seeing my syntax errors. I would like help on two issues: 1. What I want is to have the legend text in black and the colored rectangles match the black and grey of the bars. Instead, I get the legend text colored and have no idea where the default colors in the rectangles got there. 2. I've not found how to have the years (rather than the sequence of years) as the x-axis labels. Here are the dput() output and the script: structure(list(year = c(1989L, 1989L, 1990L, 1990L, 1991L, 1991L, 1993L, 1993L, 1994L, 1994L, 1995L, 1995L, 1996L, 1996L, 1997L, 1997L, 1998L, 1998L, 1999L, 1999L, 2000L, 2000L, 2001L, 2001L, 2002L, 2002L, 2003L, 2003L, 2004L, 2004L, 2005L, 2005L, 2006L, 2006L, 2007L, 2007L, 2008L, 2008L, 2009L, 2009L, 2010L, 2010L, 2011L, 2011L, 2012L, 2012L, 2013L, 2013L, 2014L, 2014L, 2015L, 2015L, 2016L, 2016L, 2017L, 2017L, 2018L, 2018L), value = c(91.17, 93.32, 91.22, 93.43, 91.24, 92.89, 91.14, 93.02, 93.92, 95.74, 94.34, 96.85, 91.32, 95.86, 91.36, 94.25, 91.24, 93.67, 94.33, 97.42, 94.33, 97.42, 94, 94.99, 94.32, 96.58, 94.02, 96.57, 94.19, 96.32, 94.05, 95.96, 94.21, 97.4, 94.21, 97.28, 94.32, 96.72, 94.13, 97.43, 94.27, 95.95, 94.34, 97.82, 94.23, 97, 94.25, 96.6, 94.15, 96.24, 94.01, 96.68, 94.09, 96.96, 94.31, 96.39, 94.35, 96.95), type = structure(c(2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L), .Label = c("Max", "Med"), class = "factor")), class = "data.frame", row.names = c(NA, -58L)) med_max <- barchart(value ~ year, data=stage_heights, panel = lattice.getOption("panel.barchart"), default.prepanel = lattice.getOption("prepanel.default.barchart"), box.ratio = 2, horizontal=FALSE, auto.key=list(space='right', col=c('black', 'grey')), groups=factor(type,labels=c('Median','Maximum')), beside=TRUE, col = c('grey','black'), labels=list(c(1989,1990,1991,1992, 1993,1994, 1995,1996,1997,1998,1999,2000,2001, 2002,2003,2004,2005,2006,2007,2008, 2009,2010,2011,2012,2013,2014,2015, 2016,2017,2018), scales=list(x=list(rot=90)), main = 'Median and Maximum Stage Heights', ylab = 'Elevation (masl)', xlab = 'Year') print(med_max) Rich