[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