[R] Ticks on barplots

Mike Prager mike.prager at noaa.gov
Wed Mar 21 19:40:55 CET 2007


Marc Schwartz <marc_schwartz at comcast.net> wrote:

> On Tue, 2007-03-20 at 18:04 -0400, Michael H. Prager wrote:
> > I am generating stacked barplots of age-composition of fish populations 
> > (Y) over time (X).  As there are many years, not every bars is labeled.  
> > When looking at the plot, it becomes difficult to associate labels with 
> > their bars.
> > 
> > We have improved this a bit by using axis() to add a tickmark below each 
> > bar.  Can anyone suggest a way to draw ticks ONLY at bars where a tick 
> > label is drawn?  Or to make such ticks longer than those where there is 
> > no label?
> > 
> > This is going into a function, so I'm hoping for a method that doesn't 
> > require looking at the plot first.
> >
> > # sample code (simplified) #
> > mp <- barplot(t(N.age), xlab = "Year", axisnames = FALSE)
> > axis(side = 1, at = mp, labels = rownames(N.age), tcl = -0.75)
> > 
> > Thanks!
> > 
> > Mike Prager
> > NOAA, Beaufort, NC
> 
> Mike,
> 
> How about something like this:
> 
>   mp <- barplot(1:50, axisnames = FALSE)
> 
>   # Create short tick marks at each bar
>   axis(1, at = mp, labels = rep("", 50), tcl = -0.25)
> 
>   # Create longer tick marks every 5 years with labels
>   axis(1, at = mp[seq(1, 50, 5)], 
>        labels = 1900 + seq(0, 45, 5), tcl = -0.75, las = 2, 
>        cex.axis = 0.75)
> 
> 
> Just pick which labels you want to be shown (eg. every 5 years) and
> synchronize the values of those with the 'at' argument in axis().
> 
> HTH,
> 
> Marc Schwartz
> 

Thanks, Marc, for this solution and thanks equally to Jim Lemon
for a similar idea.  This seems promising.  Since this is to go
into a function (and should work without intervention), I'll
need to devise an algorithm to decide at what interval the
labels should be plotted.  Clearly "axis()" has such an
algorithm.  Unfortunately, it reports its result only by placing
the labels.

Mike

-- 
Mike Prager, NOAA, Beaufort, NC
* Opinions expressed are personal and not represented otherwise.
* Any use of tradenames does not constitute a NOAA endorsement.



More information about the R-help mailing list