class_docstr: A Matplotlib converter class for string data values.
  
  Valid units for string are:
  - 'indexed' : Values are indexed as they are specified for plotting.
  - 'sorted'  : Values are sorted alphanumerically.
  - 'inverted' : Values are inverted so that the first value is on top.
  - 'sorted-inverted' :  A combination of 'sorted' and 'inverted'
class_docstr_tok: ["A","Matplotlib","converter","class","for","string","data","values",".","Valid","units","for","string","are",":","-","'indexed","'",":","Values","are","indexed","as","they","are","specified","for","plotting",".","-","'sorted","'",":","Values","are","sorted","alphanumerically",".","-","'inverted","'",":","Values","are","inverted","so","that","the","first","value","is","on","top",".","-","'sorted-inverted","'",":","A","combination","of","'sorted","'","and","'inverted","'"]
code: def convert(value, unit, axis):
      # docstring inherited
  
      if value == []:
          return []
  
      # we delay loading to make matplotlib happy
      ax = axis.axes
      if axis is ax.xaxis:
          isXAxis = True
      else:
          isXAxis = False
  
      axis.get_major_ticks()
      ticks = axis.get_ticklocs()
      labels = axis.get_ticklabels()
  
      labels = [l.get_text() for l in labels if l.get_text()]
  
      if not labels:
          ticks = []
          labels = []
  
      if not np.iterable(value):
          value = [value]
  
      newValues = []
      for v in value:
          if v not in labels and v not in newValues:
              newValues.append(v)
  
      labels.extend(newValues)
  
      # DISABLED: This is disabled because matplotlib bar plots do not
      # DISABLED: recalculate the unit conversion of the data values
      # DISABLED: this is due to design and is not really a bug.
      # DISABLED: If this gets changed, then we can activate the following
      # DISABLED: block of code.  Note that this works for line plots.
      # DISABLED if unit:
      # DISABLED     if unit.find("sorted") > -1:
      # DISABLED         labels.sort()
      # DISABLED     if unit.find("inverted") > -1:
      # DISABLED         labels = labels[::-1]
  
      # add padding (so they do not appear on the axes themselves)
      labels = [""] + labels + [""]
      ticks = list(range(len(labels)))
      ticks[0] = 0.5
      ticks[-1] = ticks[-1] - 0.5
  
      axis.set_ticks(ticks)
      axis.set_ticklabels(labels)
      # we have to do the following lines to make ax.autoscale_view work
      loc = axis.get_major_locator()
      loc.set_bounds(ticks[0], ticks[-1])
  
      if isXAxis:
          ax.set_xlim(ticks[0], ticks[-1])
      else:
          ax.set_ylim(ticks[0], ticks[-1])
  
      result = [ticks[labels.index(v)] for v in value]
  
      ax.viewLim.ignore(-1)
      return result
  
imports: import numpy
  import matplotlib.units
label_desc: Use image node_id 2 for calling the StrConverter obj's underlying member method code with example usage: obj.convert(value, unit, axis) and returns: result, list