class_docstr: A block for animated quiver plots
  
  Parameters
  ----------
  X : 1D or 2D numpy array
      The x positions of the arrows. Cannot be animated.
  Y : 1D or 2D numpy array
      The y positions of the arrows. Cannot be animated.
  U : 2D or 3D numpy array
      The U displacement of the arrows. 1 dimension
      higher than the X, Y arrays.
  V : 2D or 3D numpy array
      The V displcement of the arrows. 1 dimension
      higher than the X, Y arrays.
  ax : matplotlib.axes.Axes, optional
      The matplotlib axes to the block to.
      Defaults to matplotlib.pyplot.gca()
  t_axis : int, optional
      The axis of the array that represents time. Defaults to 0.
      No effect if U, V are lists.
  
  Attributes
  ----------
  ax : matplotlib.axes.Axes
      The matplotlib axes that the block is attached to.
  
  Notes
  -----
  This block accepts additional keyword arguments to be passed to
  :meth:`matplotlib.axes.Axes.quiver`
code: def __init__(self, X, Y, U, V, ax=None, t_axis=0, **kwargs):
      self.X = X
      self.Y = Y
      self.U = np.asanyarray(U)
      self.V = np.asanyarray(V)
      if X.shape != Y.shape:
          raise ValueError("X, Y must have the same shape")
      if self.U.shape != self.V.shape:
          raise ValueError("U, V must have the same shape")
  
      super().__init__(ax, t_axis)
  
      self._dim = len(self.U.shape)
      self._is_list = isinstance(U, list)
  
      Slice = self._make_slice(0, self._dim)
      self.Q = self.ax.quiver(
          self.X, self.Y, self.U[Slice], self.V[Slice], **kwargs
      )
  
file_path: animatplot/animatplot/blocks/vectors.py
imports: from .base import Block
  from .image_like import Pcolormesh
  import numpy
label_desc: Use image node_id 1 to create a new Quiver object from inherited base classes: Block with example: obj = Quiver(X, Y, U, V, ax, t_axis)