docstr: Sets and updates the :class:`~matplotlib.Axis.axis~ units
  
  Parameters
  ----------
  data : string or iterable of strings
  axis : :class:`~matplotlib.Axis.axis`
      axis on which the data is plotted
  
  Returns
  -------
  class:~.UnitData~
      object storing string to integer mapping
docstr_tok: ["Sets","and","updates","the",":","class",":","`","~matplotlib.Axis.axis~","units","Parameters","--","--","--","--","--","data",":","string","or","iterable","of","strings","axis",":",":","class",":","`","~matplotlib.Axis.axis","`","axis","on","which","the","data","is","plotted","Returns","--","--","--","-","class",":","~.UnitData~","object","storing","string","to","integer","mapping"]
code: def default_units(data, axis):
      """Sets and updates the :class:`~matplotlib.Axis.axis~ units
  
      Parameters
      ----------
      data : string or iterable of strings
      axis : :class:`~matplotlib.Axis.axis`
          axis on which the data is plotted
  
      Returns
      -------
      class:~.UnitData~
          object storing string to integer mapping
      """
      # the conversion call stack is supposed to be
      # default_units->axis_info->convert
      if axis.units is None:
          axis.set_units(UnitData(data))
      else:
          axis.units.update(data)
      return axis.units
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  from collections import OrderedDict
  import itertools
  import six
  import numpy
  import matplotlib.units
  import matplotlib.ticker
  from distutils.version import LooseVersion
label_desc: Use image node_id 3 for calling the StrCategoryConverter obj's underlying member method code with example usage: obj.default_units(data, axis) and returns: axis