class_docstr: Orthogonal-plane slice viewer
  
  OrthoSlicer3d expects 3- or 4-dimensional array data.  It treats
  4D data as a sequence of 3D spatial volumes, where a slice over the final
  array axis gives a single 3D spatial volume.
  
  For 3D data, the default behavior is to create a figure with 3 axes, one
  for each slice orientation of the spatial volume.
  
  Clicking and dragging the mouse in any one axis will select out the
  corresponding slices in the other two. Scrolling up and
  down moves the slice up and down in the current axis.
  
  For 4D data, the fourth figure axis can be used to control which
  3D volume is displayed.  Alternatively, the ``-`` key can be used to
  decrement the displayed volume and the ``+`` or ``=`` keys can be used to
  increment it.
  
  Examples
  --------
  >>> import numpy as np
  >>> a = np.sin(np.linspace(0, np.pi, 20))
  >>> b = np.sin(np.linspace(0, np.pi*5, 20))
  >>> data = np.outer(a, b)[..., np.newaxis] * a
  >>> OrthoSlicer3D(data).show()  # doctest: +SKIP
docstr: Update all four (or three) plots
docstr_tok: ["Update","all","four","(","or","three",")","plots"]
code: def _draw(self):
      """Update all four (or three) plots"""
      if self._closed:  # make sure we don't draw when we shouldn't
          return
      for ii in range(3):
          ax = self._axes[ii]
          ax.draw_artist(self._ims[ii])
          if self._cross:
              for line in self._crosshairs[ii].values():
                  ax.draw_artist(line)
          ax.figure.canvas.blit(ax.bbox)
      if self.n_volumes > 1 and len(self._axes) > 3:
          ax = self._axes[3]
          ax.draw_artist(ax.patch)  # axis bgcolor to erase old lines
          for key in ("step", "patch"):
              ax.draw_artist(self._volume_ax_objs[key])
          ax.figure.canvas.blit(ax.bbox)
  
imports: import weakref
  import numpy
  from .affines import voxel_sizes
  from .optpkg import optional_package
  from .orientations import aff2axcodes, axcodes2ornt
label_desc: Use image node_id 26 for calling the OrthoSlicer3D obj's underlying member method code with example usage: obj._draw() without return types