[R] Ticks on barplots

Marc Schwartz marc_schwartz at comcast.net
Wed Mar 21 20:23:12 CET 2007


On Wed, 2007-03-21 at 14:40 -0400, Mike Prager wrote:
> 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,

To get a feel for how axis() creates the default tick positions when
'at' is the default NULL, see ?axTicks, which provides functionality
similar to the internal C routine.

You could also look at ?pretty

HTH,

Marc



More information about the R-help mailing list