class_docstr: Specialized PolyCollection for barbs.
  
  The only API method is :meth:`set_UVC`, which can be used to
  change the size, orientation, and color of the arrows.  Locations
  are changed using the :meth:`set_offsets` collection method.
  Possibly this method will be useful in animations.
  
  There is one internal function :meth:`_find_tails` which finds
  exactly what should be put on the barb given the vector magnitude.
  From there :meth:`_make_barbs` is used to find the vertices of the
  polygon to represent the barb based on this information.
class_docstr_tok: ["Specialized","PolyCollection","for","barbs",".","The","only","API","method","is",":","meth",":","`","set_UVC","`",",","which","can","be","used","to","change","the","size",",","orientation",",","and","color","of","the","arrows",".","Locations","are","changed","using","the",":","meth",":","`","set_offsets","`","collection","method",".","Possibly","this","method","will","be","useful","in","animations",".","There","is","one","internal","function",":","meth",":","`","_find_tails","`","which","finds","exactly","what","should","be","put","on","the","barb","given","the","vector","magnitude",".","From","there",":","meth",":","`","_make_barbs","`","is","used","to","find","the","vertices","of","the","polygon","to","represent","the","barb","based","on","this","information","."]
code: def set_UVC(self, U, V, C=None):
      # We need to ensure we have a copy, not a reference to an array that
      # might change before draw().
      self.u = ma.masked_invalid(U, copy=True).ravel()
      self.v = ma.masked_invalid(V, copy=True).ravel()
  
      # Flip needs to have the same number of entries as everything else.
      # Use broadcast_to to avoid a bloated array of identical values.
      # (can't rely on actual broadcasting)
      if len(self.flip) == 1:
          flip = np.broadcast_to(self.flip, self.u.shape)
      else:
          flip = self.flip
  
      if C is not None:
          c = ma.masked_invalid(C, copy=True).ravel()
          x, y, u, v, c, flip = cbook.delete_masked_points(
              self.x.ravel(),
              self.y.ravel(),
              self.u,
              self.v,
              c,
              flip.ravel(),
          )
          _check_consistent_shapes(x, y, u, v, c, flip)
      else:
          x, y, u, v, flip = cbook.delete_masked_points(
              self.x.ravel(),
              self.y.ravel(),
              self.u,
              self.v,
              flip.ravel(),
          )
          _check_consistent_shapes(x, y, u, v, flip)
  
      magnitude = np.hypot(u, v)
      flags, barbs, halves, empty = self._find_tails(
          magnitude, self.rounding, **self.barb_increments
      )
  
      # Get the vertices for each of the barbs
  
      plot_barbs = self._make_barbs(
          u,
          v,
          flags,
          barbs,
          halves,
          empty,
          self._length,
          self._pivot,
          self.sizes,
          self.fill_empty,
          flip,
      )
      self.set_verts(plot_barbs)
  
      # Set the color array
      if C is not None:
          self.set_array(c)
  
      # Update the offsets in case the masked data changed
      xy = np.column_stack((x, y))
      self._offsets = xy
      self.stale = True
  
imports: import math
  import numpy
  from numpy import ma
  from matplotlib import _api, cbook, _docstring
  import matplotlib.artist
  import matplotlib.collections
  from matplotlib.patches import CirclePolygon
  import matplotlib.text
  import matplotlib.transforms
label_desc: Use image node_id 4 for calling the Barbs obj's underlying member method code with example usage: obj.set_UVC(U, V, C) without return types