[R] bar order using lattice barchart()

Tim Clark mudiver1200 at yahoo.com
Fri May 7 02:09:05 CEST 2010


Greg,

Thanks for the great explanation.  Knowing the philosophy behind these kind of things really helps avoid problems in the future. 

Aloha,

Tim

Tim Clark
Department of Zoology 
University of Hawaii


--- On Thu, 5/6/10, Greg Snow <Greg.Snow at imail.org> wrote:

> From: Greg Snow <Greg.Snow at imail.org>
> Subject: RE: [R] bar order using lattice barchart()
> To: "Tim Clark" <mudiver1200 at yahoo.com>, "r-help at r-project.org" <r-help at r-project.org>
> Date: Thursday, May 6, 2010, 7:51 AM
> The short answer to your query is
> ?reorder
> 
> The longer answer (or a longer answer) gets into a bit of
> philosophy (so feel free to go back to the short answer and
> skip this if you don't want to get into the philosophy, you
> have been warned).  Let's start with the question: is
> the order of the bars a property of the graph/analysis? The
> dataset as a whole? Or the individual variable?
> 
> Some programs take the first approach, the order is a
> property of the graph or analysis, these programs have you
> specify things like the order at the time of creating the
> graph or doing the analysis.  I don't like this
> approach because it seems to me that this should be more
> inherent to the data than the output, also this means that
> you have to keep specifying the order for every
> graph/analysis and I am too lazy to like that.
> 
> Your attempt was number 2, the order should be a property
> of the dataset.  For your example this makes a lot of
> sense, you want x ordered by y.  But this does not
> generalize to some other situations, so is not the standard
> for R.
> 
> My favorite (and what is used in R, so apparently I'm not
> the only one) is to have things like the order be a property
> of the individual variable (x in this case).  Your data
> frame will have x as a factor by default (and even if you
> specifically told R to not convert it to a factor, then many
> plotting/analysis functions will still convert it to a
> factor).  If you don't specify the order of the factor
> levels then the default is to do it alphabetically and this
> will be used by plotting/analysis functions regardless of
> the order in the data set.  One of the easier ways to
> change the order of the factor levels, especially for a case
> like yours is using the reoder function, try something
> like:
> 
> > xy$x <- reorder( xy$x, xy$y )
> 
> You won't see any obvious differences when you print the
> data frame, but if you print just x then you should and your
> plots should come out the way that you want now.
> 
> You did ask "why?" and were warned.  Hope this helps,
> 
> -- 
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.snow at imail.org
> 801.408.8111
> 
> 
> > -----Original Message-----
> > From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-
> > project.org] On Behalf Of Tim Clark
> > Sent: Wednesday, May 05, 2010 8:57 PM
> > To: r-help at r-project.org
> > Subject: [R] bar order using lattice barchart()
> > 
> > Dear List,
> > 
> > I am want to plot my data in increasing order using
> the lattice
> > barchart() function.  I used order() to put my
> data in the order I
> > want, but when I plot it I get the original order of
> the data.  I think
> > this has to do with the row index number since order()
> does not re-
> > number the rows in the new order but instead keeps the
> original row
> > numbers and puts them in a different order.  For
> example:
> > 
> > xy<-data.frame(x=letters[1:5],y=c(3,9,2,1,10))
> > 
> > #This produces a dataframe in alphebitical order with
> row numbers in
> > #numerical order.
> > > xy
> >   x     
>    y
> > 1 a  8.921657
> > 2 b 10.314625
> > 3 c  9.531537
> > 4 d 10.818563
> > 5 e  9.084872
> > 
> > 
> > #If I re-order the data based on the value of y
> > 
> > xy<-xy[order(y),]
> > 
> > #I get a dataframe ordered by y but the row numbers
> are still in
> > #alphebetical order based on x
> > > xy
> >   x     
>    y
> > 1 a  8.921657
> > 5 e  9.084872
> > 3 c  9.531537
> > 2 b 10.314625
> > 4 d 10.818563
> > 
> > #I then try to plot the data and it plots it in
> alphabetical instead of
> > #numeric order
> > library(lattice)
> > barchart(y~x, data=xy)
> > 
> > 
> > 
> > Why are the rows not re-indexed, and how do I get
> barchart() to plot my
> > data in increasing numeric order?
> > 
> > Thanks,
> > 
> > Tim
> > 
> > 
> > 
> > 
> > Tim Clark
> > Department of Zoology
> > University of Hawaii
> > 
> > ______________________________________________
> > 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.
> 






More information about the R-help mailing list