class_docstr: Subclass of PointPlot allowing plotting of Points
  on a 3D axis, also allows mapping color and size
  onto a particular Dimension of the data.
class_docstr_tok: ["Subclass","of","PointPlot","allowing","plotting","of","Points","on","a","3D","axis",",","also","allows","mapping","color","and","size","onto","a","particular","Dimension","of","the","data","."]
code: def update_handles(self, key, axis, element, ranges, style):
      artist = self.handles["artist"]
      artist._offsets3d, style, _ = self.get_data(
          element, ranges, style
      )
      cdim = element.get_dimension(self.color_index)
      if cdim and "cmap" in style:
          clim = style["vmin"], style["vmax"]
          cmap = cm.get_cmap(style["cmap"])
          artist._facecolor3d = map_colors(
              style["c"], clim, cmap, hex=False
          )
      if element.get_dimension(self.size_index):
          artist.set_sizes(style["s"])
  
imports: import numpy
  import param
  from matplotlib import cm
  from mpl_toolkits.mplot3d.art3d import Line3DCollection
  from packaging.version import Version
  from ...core import Dimension
  from ...core.options import abbreviated_exception
  from ...util.transform import dim
  from ..util import map_colors
  from .chart import PointPlot
  from .element import ColorbarPlot
  from .path import PathPlot
  from .util import mpl_version
label_desc: Use image node_id 2 for calling the Scatter3DPlot obj's underlying member method code with example usage: obj.update_handles(key, axis, element, ranges, style) without return types