# [R] Ordering boxplot factors

Prof Brian Ripley ripley at stats.ox.ac.uk
Fri Jan 6 09:22:02 CET 2006

```On Thu, 5 Jan 2006, Marc Schwartz wrote:

> On Thu, 2006-01-05 at 20:27 -0600, Joseph LeBouton wrote:
>> Hi all,
>>
>> what a great help list!  I hope someone can help me with this puzzle...
>>
>> I'm trying to find a simple way to do:
>>
>> boxplot(obs~factor)
>>
>> so that the factors are ordered left-to-right along the x-axis by
>> median, not alphabetically by factor name.

The thing to realize is that they are not alphabetic, but ordered by
factor levels.  So the key is to set the levels.  (The help page for
boxplot does say that, as I was relieved to find.)

>> Complicated ways abound, but I'm hoping for a magical one-liner that'll
>> do the trick.
>>
>> Any suggestions would be treasured.
>>
>> Thanks,
>>
>> -jlb
>
>
> Using the first example in ?boxplot, which is:
>
> boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
>
>
>
> Get the medians for 'count by spray' using tapply() and then sort the
> results in increasing order, by median:
>
>  med <- sort(with(InsectSprays, tapply(count, spray, median)))
>
>> med
>   C    E    D    A    F    B
> 1.5  3.0  5.0 14.0 15.0 16.5
>
>
> Now do the boxplot, setting the factor levels in order by median:
>
>  boxplot(count ~ factor(spray, levels = names(med)),
>          data = InsectSprays, col = "lightgray")
>
>
> So...technically two lines of code.

This was answered yesterday in terms of bwplot.  See ?reorder.factor
for the same example done using reorder.factor.  That will give you the
single line asked for, and be self-explanatory.

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

```