Hello I'm using a dataframe (mydata) where row names are sampling points and column names are species in a multivariate analysis. If I write boxplot(mydata) I'll have boxplots for each species abundance in alphabetical order. How to get the boxes orderer by the median? Usually for this I write boxplot(value~category,at=rank(tapply(mydata$value,mydata$category,median))) but for this to work I need a column for the categories and another column for the values. Thanks in advance, best regards. Antonio Olinto [[alternative HTML version deleted]]
On Mar 20, 2015, at 2:20 PM, Antonio Silva wrote:> Hello > > I'm using a dataframe (mydata) where row names are sampling points and > column names are species in a multivariate analysis. > > If I write boxplot(mydata) I'll have boxplots for each species abundance in > alphabetical order. > > How to get the boxes orderer by the median? > > Usually for this I write > boxplot(value~category,at=rank(tapply(mydata$value,mydata$category,median)))I would not have expected that to succeed. The usual approach is to change the order of factor levels before the call to boxplot.> but for this to work I need a column for the categories and another column > for the values.Yes. That is the usual situation. Since you provide no data we cannot tell what is different about your case.> > Thanks in advance, best regards. > > Antonio Olinto > > [[alternative HTML version deleted]] > > ______________________________________________ > 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.David Winsemius Alameda, CA, USA
You can use the reorder() function to reorder the grouping vector's factor levels according to a function of the data in each group. E.g., compare the following two plots: d <- data.frame(Response=cos(1:15), Group=rep(c("A","B","C"),c(6,5,4))) par(mfrow=c(1,2)) boxplot(Response ~ Group, data=d) boxplot(Response ~ reorder(Group, X=Response, FUN=median), data=d) Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Mar 20, 2015 at 2:20 PM, Antonio Silva <aolinto.lst at gmail.com> wrote:> Hello > > I'm using a dataframe (mydata) where row names are sampling points and > column names are species in a multivariate analysis. > > If I write boxplot(mydata) I'll have boxplots for each species abundance in > alphabetical order. > > How to get the boxes orderer by the median? > > Usually for this I write > > boxplot(value~category,at=rank(tapply(mydata$value,mydata$category,median))) > but for this to work I need a column for the categories and another column > for the values. > > Thanks in advance, best regards. > > Antonio Olinto > > [[alternative HTML version deleted]] > > ______________________________________________ > 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]]
Thanks Bill and David Here goes an example SP1<-c(9,6,7,8,5,8,7,5,9,7) SP2<-c(1,3,4,2,4,2,5,3,2,1) SP3<-c(4,6,7,5,7,8,7,6,5,4) SP4<-c(5,4,3,5,2,3,4,3,4,2) mydata<-data.frame(SP1,SP2,SP3,SP4) rownames(mydata)<-c("ST1","ST2","ST3","ST4","ST5","ST6","ST7","ST8","ST9","ST10") mydata boxplot(mydata) Note that this data frame does not have the format Response ~ Group. In my real matrix I have up to 40 species. Is there any way to have the species ordered by their median abundance (or other parameter?) The desired order is given by names(sort(apply(mydata,2,median))) Thanks once more, Antonio Olinto Fisheries Institute Sao Paulo, Brazil 2015-03-21 15:13 GMT-03:00 William Dunlap <wdunlap at tibco.com>:> You can use the reorder() function to reorder the grouping vector's > factor levels according to a function of the data in each group. E.g., > compare the following two plots: > > d <- data.frame(Response=cos(1:15), Group=rep(c("A","B","C"),c(6,5,4))) > par(mfrow=c(1,2)) > boxplot(Response ~ Group, data=d) > boxplot(Response ~ reorder(Group, X=Response, FUN=median), data=d) > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Fri, Mar 20, 2015 at 2:20 PM, Antonio Silva <aolinto.lst at gmail.com> > wrote: > >> Hello >> >> I'm using a dataframe (mydata) where row names are sampling points and >> column names are species in a multivariate analysis. >> >> If I write boxplot(mydata) I'll have boxplots for each species abundance >> in >> alphabetical order. >> >> How to get the boxes orderer by the median? >> >> Usually for this I write >> >> boxplot(value~category,at=rank(tapply(mydata$value,mydata$category,median))) >> but for this to work I need a column for the categories and another column >> for the values. >> >> Thanks in advance, best regards. >> >> Antonio Olinto >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> 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]]