# Class CategoryAxis

java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.chart.Axis<String>
javafx.scene.chart.CategoryAxis

All Implemented Interfaces:
  `Styleable, EventTarget`

public final class CategoryAxis extends Axis<String>
A axis implementation that will works on string categories where each value as a unique category(tick mark) along the axis.

Since:
  JavaFX 2.0

- ## Nested Class Summary

  ### Nested classes/interfaces declared in class Axis

  `Axis.TickMark<T>`

- ## Property Summary

  Properties
  Type
  Property
  Description
  `final ReadOnlyDoubleProperty`
  `categorySpacing`
  This is the gap between one category and the next along this axis
  `final DoubleProperty`
  `endMargin`
  The margin between the last tick mark and the axis end
  `final BooleanProperty`
  `gapStartAndEnd`
  If this is true then half the space between ticks is left at the start and end
  `final DoubleProperty`
  `startMargin`
  The margin between the axis start and the first tick-mark

  ### Properties declared in class Axis

  `animated, autoRanging, label, side, tickLabelFill, tickLabelFont, tickLabelGap, tickLabelRotation, tickLabelsVisible, tickLength, tickMarkVisible`

  ### Properties declared in class Region

  `background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width`

  ### Properties declared in class Parent

  `needsLayout`

  ### Properties declared in class Node

  `accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, focusVisible, focusWithin, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragDone, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible`

- ## Field Summary

  ### Fields declared in class Region

  `USE_COMPUTED_SIZE, USE_PREF_SIZE`

  ### Fields declared in class Node

  `BASELINE_OFFSET_SAME_AS_HEIGHT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CategoryAxis()`
  Create a auto-ranging category axis with an empty list of categories.
  `CategoryAxis(ObservableList<String> categories)`
  Create a category axis with the given categories.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected Object`
  `autoRange(double length)`
  This calculates the categories based on the data provided to invalidateRange() method.
  `protected List<String>`
  `calculateTickValues(double length, Object range)`
  Calculate a list of all the data values for each tick mark in range
  `final ReadOnlyDoubleProperty`
  `categorySpacingProperty()`
  This is the gap between one category and the next along this axis
  `final DoubleProperty`
  `endMarginProperty()`
  The margin between the last tick mark and the axis end
  `final BooleanProperty`
  `gapStartAndEndProperty()`
  If this is true then half the space between ticks is left at the start and end
  `final ObservableList<String>`
  `getCategories()`
  Returns a `ObservableList` of categories plotted on this axis.
  `final double`
  `getCategorySpacing()`
  Gets the value of the `categorySpacing` property.
  `static List<CssMetaData<? extends Styleable, ?>>`
  `getClassCssMetaData()`
  Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses.
  `List<CssMetaData<? extends Styleable, ?>>`
  `getCssMetaData()`
  This method should delegate to `Node.getClassCssMetaData()` so that a Node's CssMetaData can be accessed without the need for reflection.
  `double`
  `getDisplayPosition(String value)`
  Get the display position along this axis for a given value.
  `final double`
  `getEndMargin()`
  Gets the value of the `endMargin` property.
  `protected Object`
  `getRange()`
  Called to get the current axis range.
  `final double`
  `getStartMargin()`
  Gets the value of the `startMargin` property.
  `protected String`
  `getTickMarkLabel(String value)`
  Get the string label name for a tick mark with the given value
  `String`
  `getValueForDisplay(double displayPosition)`
  Get the data value for the given display position on this axis.
  `double`
  `getZeroPosition()`
  Get the display position of the zero line along this axis.
  `void`
  `invalidateRange(List<String> data)`
  Called when data has changed and the range may not be valid any more.
  `final boolean`
  `isGapStartAndEnd()`
  Gets the value of the `gapStartAndEnd` property.
  `boolean`
  `isValueOnAxis(String value)`
  Checks if the given value is plottable on this axis
  `protected Dimension2D`
  `measureTickMarkSize(String value, Object range)`
  Measure the size of the label for given tick mark value.
  `final void`
  `setCategories(ObservableList<String> value)`
  The ordered list of categories plotted on this axis.
  `final void`
  `setEndMargin(double value)`
  Sets the value of the `endMargin` property.
  `final void`
  `setGapStartAndEnd(boolean value)`
  Sets the value of the `gapStartAndEnd` property.
  `protected void`
  `setRange(Object range, boolean animate)`
  Called to set the current axis range to the given range.
  `final void`
  `setStartMargin(double value)`
  Sets the value of the `startMargin` property.
  `final DoubleProperty`
  `startMarginProperty()`
  The margin between the axis start and the first tick-mark
  `double`
  `toNumericValue(String value)`
  All axis values must be representable by some numeric value.
  `String`
  `toRealValue(double value)`
  All axis values must be representable by some numeric value.

  ### Methods declared in class Axis

  `animatedProperty, autoRangingProperty, computePrefHeight, computePrefWidth, getAnimated, getLabel, getSide, getTickLabelFill, getTickLabelFont, getTickLabelGap, getTickLabelRotation, getTickLength, getTickMarks, invalidateRange, isAutoRanging, isRangeValid, isTickLabelsVisible, isTickMarkVisible, labelProperty, layoutChildren, measureTickMarkLabelSize, measureTickMarkSize, requestAxisLayout, requestLayout, setAnimated, setAutoRanging, setLabel, setSide, setTickLabelFill, setTickLabelFont, setTickLabelGap, setTickLabelRotation, setTickLabelsVisible, setTickLength, setTickMarkVisible, shouldAnimate, sideProperty, tickLabelFillProperty, tickLabelFontProperty, tickLabelGapProperty, tickLabelRotationProperty, tickLabelsVisibleProperty, tickLengthProperty, tickMarksUpdated, tickMarkVisibleProperty`

  ### Methods declared in class Region

  `backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isResizable, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty`

  ### Methods declared in class Parent

  `getBaselineOffset, getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, needsLayoutProperty, requestParentLayout, setNeedsLayout, updateBounds`

  ### Methods declared in class Node

  `accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragDone, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isFocusVisible, isFocusWithin, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragDoneProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, requestFocusTraversal, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragDone, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty`

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods declared in interface Styleable

  `getStyleableNode`

- ## Property Details

  - ### startMargin

    public final DoubleProperty startMarginProperty
    The margin between the axis start and the first tick-mark
    See Also:
      - `getStartMargin()`
      - `setStartMargin(double)`
      - `startMarginProperty()`

  - ### endMargin

    public final DoubleProperty endMarginProperty
    The margin between the last tick mark and the axis end
    See Also:
      - `getEndMargin()`
      - `setEndMargin(double)`
      - `endMarginProperty()`

  - ### gapStartAndEnd

    public final BooleanProperty gapStartAndEndProperty
    If this is true then half the space between ticks is left at the start and end
    See Also:
      - `isGapStartAndEnd()`
      - `setGapStartAndEnd(boolean)`
      - `gapStartAndEndProperty()`

  - ### categorySpacing

    public final ReadOnlyDoubleProperty categorySpacingProperty
    This is the gap between one category and the next along this axis
    See Also:
      - `getCategorySpacing()`
      - `categorySpacingProperty()`

- ## Constructor Details

  - ### CategoryAxis

    public CategoryAxis()
    Create a auto-ranging category axis with an empty list of categories.

  - ### CategoryAxis

    public CategoryAxis(ObservableList<String> categories)
    Create a category axis with the given categories. This will not auto-range but be fixed with the given categories.
    Parameters:
      `categories` - List of the categories for this axis

- ## Method Details

  - ### getStartMargin

    public final double getStartMargin()
    Gets the value of the `startMargin` property.
    Property description:
      The margin between the axis start and the first tick-mark
    Returns:
      the value of the `startMargin` property
    See Also:
      - `setStartMargin(double)`
      - `startMarginProperty()`

  - ### setStartMargin

    public final void setStartMargin(double value)
    Sets the value of the `startMargin` property.
    Property description:
      The margin between the axis start and the first tick-mark
    Parameters:
      `value` - the value for the `startMargin` property
    See Also:
      - `getStartMargin()`
      - `startMarginProperty()`

  - ### startMarginProperty

    public final DoubleProperty startMarginProperty()
    The margin between the axis start and the first tick-mark
    Returns:
      the `startMargin` property
    See Also:
      - `getStartMargin()`
      - `setStartMargin(double)`

  - ### getEndMargin

    public final double getEndMargin()
    Gets the value of the `endMargin` property.
    Property description:
      The margin between the last tick mark and the axis end
    Returns:
      the value of the `endMargin` property
    See Also:
      - `setEndMargin(double)`
      - `endMarginProperty()`

  - ### setEndMargin

    public final void setEndMargin(double value)
    Sets the value of the `endMargin` property.
    Property description:
      The margin between the last tick mark and the axis end
    Parameters:
      `value` - the value for the `endMargin` property
    See Also:
      - `getEndMargin()`
      - `endMarginProperty()`

  - ### endMarginProperty

    public final DoubleProperty endMarginProperty()
    The margin between the last tick mark and the axis end
    Returns:
      the `endMargin` property
    See Also:
      - `getEndMargin()`
      - `setEndMargin(double)`

  - ### isGapStartAndEnd

    public final boolean isGapStartAndEnd()
    Gets the value of the `gapStartAndEnd` property.
    Property description:
      If this is true then half the space between ticks is left at the start and end
    Returns:
      the value of the `gapStartAndEnd` property
    See Also:
      - `setGapStartAndEnd(boolean)`
      - `gapStartAndEndProperty()`

  - ### setGapStartAndEnd

    public final void setGapStartAndEnd(boolean value)
    Sets the value of the `gapStartAndEnd` property.
    Property description:
      If this is true then half the space between ticks is left at the start and end
    Parameters:
      `value` - the value for the `gapStartAndEnd` property
    See Also:
      - `isGapStartAndEnd()`
      - `gapStartAndEndProperty()`

  - ### gapStartAndEndProperty

    public final BooleanProperty gapStartAndEndProperty()
    If this is true then half the space between ticks is left at the start and end
    Returns:
      the `gapStartAndEnd` property
    See Also:
      - `isGapStartAndEnd()`
      - `setGapStartAndEnd(boolean)`

  - ### setCategories

    public final void setCategories(ObservableList<String> value)
    The ordered list of categories plotted on this axis. This is set automatically based on the charts data if autoRanging is true. If the application sets the categories then auto ranging is turned off. If there is an attempt to add duplicate entry into this list, an `IllegalArgumentException` is thrown.
    Parameters:
      `value` - the ordered list of categories plotted on this axis

  - ### getCategories

    public final ObservableList<String> getCategories()
    Returns a `ObservableList` of categories plotted on this axis.
    Returns:
      ObservableList of categories for this axis.

  - ### getCategorySpacing

    public final double getCategorySpacing()
    Gets the value of the `categorySpacing` property.
    Property description:
      This is the gap between one category and the next along this axis
    Returns:
      the value of the `categorySpacing` property
    See Also:
      - `categorySpacingProperty()`

  - ### categorySpacingProperty

    public final ReadOnlyDoubleProperty categorySpacingProperty()
    This is the gap between one category and the next along this axis
    Returns:
      the `categorySpacing` property
    See Also:
      - `getCategorySpacing()`

  - ### getRange

    protected Object getRange()
    Called to get the current axis range.
    Specified by:
      `getRange` in class `Axis<String>`
    Returns:
      A range object that can be passed to setRange() and calculateTickValues()

  - ### setRange

    protected void setRange(Object range, boolean animate)
    Called to set the current axis range to the given range. If isAnimating() is true then this method should animate the range to the new range.
    Specified by:
      `setRange` in class `Axis<String>`
    Parameters:
      `range` - A range object returned from autoRange()
      `animate` - If true animate the change in range

  - ### autoRange

    protected Object autoRange(double length)
    This calculates the categories based on the data provided to invalidateRange() method. This must not effect the state of the axis, changing any properties of the axis. Any results of the auto-ranging should be returned in the range object. This will we passed to setRange() if it has been decided to adopt this range for this axis.
    Specified by:
      `autoRange` in class `Axis<String>`
    Parameters:
      `length` - The length of the axis in screen coordinates
    Returns:
      Range information, this is implementation dependent

  - ### calculateTickValues

    protected List<String> calculateTickValues(double length, Object range)
    Calculate a list of all the data values for each tick mark in range
    Specified by:
      `calculateTickValues` in class `Axis<String>`
    Parameters:
      `length` - The length of the axis in display units
      `range` - A range object returned from autoRange()
    Returns:
      A list of tick marks that fit along the axis if it was the given length

  - ### getTickMarkLabel

    protected String getTickMarkLabel(String value)
    Get the string label name for a tick mark with the given value
    Specified by:
      `getTickMarkLabel` in class `Axis<String>`
    Parameters:
      `value` - The value to format into a tick label string
    Returns:
      A formatted string for the given value

  - ### measureTickMarkSize

    protected Dimension2D measureTickMarkSize(String value, Object range)
    Measure the size of the label for given tick mark value. This uses the font that is set for the tick marks
    Overrides:
      `measureTickMarkSize` in class `Axis<String>`
    Parameters:
      `value` - tick mark value
      `range` - range to use during calculations
    Returns:
      size of tick mark label for given value

  - ### invalidateRange

    public void invalidateRange(List<String> data)
    Called when data has changed and the range may not be valid any more. This is only called by the chart if isAutoRanging() returns true. If we are auto ranging it will cause layout to be requested and auto ranging to happen on next layout pass.
    Overrides:
      `invalidateRange` in class `Axis<String>`
    Parameters:
      `data` - The current set of all data that needs to be plotted on this axis

  - ### getDisplayPosition

    public double getDisplayPosition(String value)
    Get the display position along this axis for a given value. If the value is not equal to any of the categories, Double.NaN is returned
    Specified by:
      `getDisplayPosition` in class `Axis<String>`
    Parameters:
      `value` - The data value to work out display position for
    Returns:
      display position or Double.NaN if value not one of the categories

  - ### getValueForDisplay

    public String getValueForDisplay(double displayPosition)
    Get the data value for the given display position on this axis. If the axis is a CategoryAxis this will be the nearest value.
    Specified by:
      `getValueForDisplay` in class `Axis<String>`
    Parameters:
      `displayPosition` - A pixel position on this axis
    Returns:
      the nearest data value to the given pixel position or null if not on axis;

  - ### isValueOnAxis

    public boolean isValueOnAxis(String value)
    Checks if the given value is plottable on this axis
    Specified by:
      `isValueOnAxis` in class `Axis<String>`
    Parameters:
      `value` - The value to check if its on axis
    Returns:
      true if the given value is plottable on this axis

  - ### toNumericValue

    public double toNumericValue(String value)
    All axis values must be representable by some numeric value. This gets the numeric value for a given data value.
    Specified by:
      `toNumericValue` in class `Axis<String>`
    Parameters:
      `value` - The data value to convert
    Returns:
      Numeric value for the given data value

  - ### toRealValue

    public String toRealValue(double value)
    All axis values must be representable by some numeric value. This gets the data value for a given numeric value.
    Specified by:
      `toRealValue` in class `Axis<String>`
    Parameters:
      `value` - The numeric value to convert
    Returns:
      Data value for given numeric value

  - ### getZeroPosition

    public double getZeroPosition()
    Get the display position of the zero line along this axis. As there is no concept of zero on a CategoryAxis this is always Double.NaN.
    Specified by:
      `getZeroPosition` in class `Axis<String>`
    Returns:
      always Double.NaN for CategoryAxis

  - ### getClassCssMetaData

    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData()
    Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses.
    Returns:
      the `CssMetaData`
    Since:
      JavaFX 8.0

  - ### getCssMetaData

    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData()
    This method should delegate to `Node.getClassCssMetaData()` so that a Node's CssMetaData can be accessed without the need for reflection.
    Specified by:
      `getCssMetaData` in interface `Styleable`
    Overrides:
      `getCssMetaData` in class `Axis<String>`
    Returns:
      The CssMetaData associated with this node, which may include the CssMetaData of its superclasses.
    Since:
      JavaFX 8.0