Class BasicTicker

java.lang.Object
uk.ac.starlink.ttools.plot2.BasicTicker
All Implemented Interfaces:
Ticker

public abstract class BasicTicker extends Object implements Ticker
Partial Ticker implementation based on a rule defining a sequence of ticks. Concrete subclasses must implement a method to create a Rule suitable for a given range, and this is used to provide suitable ticks for particular circumstances, including avoiding label overlap.
Since:
17 Oct 2013
Author:
Mark Taylor
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
    Defines a specific rule for generating major and minor axis tick marks.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final BasicTicker
    Ticker for linear axes.
    static final BasicTicker
    Ticker for logarithmic axes.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    BasicTicker(boolean logFlag)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    createRule(double dlo, double dhi, double approxMajorCount, int adjust)
    Returns a new rule for labelling an axis in a given range.
    static Tick[]
    getMajorTicks(BasicTicker.Rule rule, double dlo, double dhi)
    Use a given rule to generate major ticks in a given range of coordinates.
    static Tick[]
    getMinorTicks(BasicTicker.Rule rule, double dlo, double dhi)
    Use a given rule to generate minor ticks in a given range of coordinates.
    getRule(double dlo, double dhi, Captioner captioner, Orientation orient, int npix, double crowding)
    Returns a Rule suitable for a given axis labelling job.
    getTicks(double dlo, double dhi, boolean withMinor, Captioner captioner, Orientation orient, int npix, double crowding)
    Generates tick marks for labelling a plot axis.
    static Caption
    linearLabel(long mantissa, int exp)
    Generates a major tick mark label suitable for use with linear axes.
    static boolean
    overlaps(Tick[] ticks, Axis axis, Captioner captioner, Orientation orient)
    Determines whether the labels for a set of tick marks would overlap when painted on a given axis.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • LINEAR

      public static final BasicTicker LINEAR
      Ticker for linear axes.
    • LOG

      public static final BasicTicker LOG
      Ticker for logarithmic axes.
  • Constructor Details

    • BasicTicker

      protected BasicTicker(boolean logFlag)
      Constructor.
      Parameters:
      logFlag - true for logarithmic axis, false for linear
  • Method Details

    • createRule

      public abstract BasicTicker.Rule createRule(double dlo, double dhi, double approxMajorCount, int adjust)
      Returns a new rule for labelling an axis in a given range. The tick density is determined by two parameters, approxMajorCount, which gives a baseline value for the number of ticks required over the given range, and adjust. Increasing adjust will give more major ticks, and decreasing it will give fewer ticks. Each value of adjust should result in a different tick count.
      Parameters:
      dlo - minimum axis data value
      dhi - maximum axis data value
      approxMajorCount - guide value for number of major ticks in range
      adjust - adjusts density of major ticks, zero is normal
    • getTicks

      public Tick[] getTicks(double dlo, double dhi, boolean withMinor, Captioner captioner, Orientation orient, int npix, double crowding)
      Description copied from interface: Ticker
      Generates tick marks for labelling a plot axis.
      Specified by:
      getTicks in interface Ticker
      Parameters:
      dlo - minimum axis data value
      dhi - maximum axis data value
      withMinor - if true minor axes are included, if false only major (labelled) ones are
      captioner - caption painter
      orient - label orientation
      npix - number of pixels along the axis
      crowding - 1 for normal tick density on the axis, lower for fewer labels, higher for more
      Returns:
      tick array
    • getRule

      public BasicTicker.Rule getRule(double dlo, double dhi, Captioner captioner, Orientation orient, int npix, double crowding)
      Returns a Rule suitable for a given axis labelling job. This starts off by generating ticks at roughly a standard separation, guided by the crowding parameter. However, if the resulting ticks are so close as to overlap, it backs off until it finds a set of ticks that can be displayed in a tidy fashion.
      Parameters:
      dlo - minimum axis data value
      dhi - maximum axis data value
      captioner - caption painter
      orient - label orientation
      npix - number of pixels along the axis
      crowding - 1 for normal tick density on the axis, lower for fewer labels, higher for more
      Returns:
      basic tick generation rule
    • getMajorTicks

      public static Tick[] getMajorTicks(BasicTicker.Rule rule, double dlo, double dhi)
      Use a given rule to generate major ticks in a given range of coordinates.
      Parameters:
      rule - tick generation rule
      dlo - minimum axis data value
      dhi - maximum axis data value
      Returns:
      array of major ticks
    • getMinorTicks

      public static Tick[] getMinorTicks(BasicTicker.Rule rule, double dlo, double dhi)
      Use a given rule to generate minor ticks in a given range of coordinates.
      Parameters:
      rule - tick generation rule
      dlo - minimum axis data value
      dhi - maximum axis data value
      Returns:
      array of minor ticks
    • linearLabel

      public static Caption linearLabel(long mantissa, int exp)
      Generates a major tick mark label suitable for use with linear axes. Some care is required assembling the label, to make sure we avoid rounding issues (like 0.999999999999). Double.toString() is not good enough.
      Parameters:
      mantissa - multiplier
      exp - power of 10
      Returns:
      tick label text
    • overlaps

      public static boolean overlaps(Tick[] ticks, Axis axis, Captioner captioner, Orientation orient)
      Determines whether the labels for a set of tick marks would overlap when painted on a given axis.
      Parameters:
      ticks - major tick marks
      axis - axis on which the ticks will be drawn
      captioner - caption painter
      orient - label orientation
      Returns:
      true iff some of the ticks are so close to each other that their labels will overlap