code: def update_scalars(self, scalars, mesh=None, render=True):
          
          if mesh is None:
              mesh = self.mesh
  
          if isinstance(mesh, (collections.Iterable, vtki.MultiBlock)):
              # Recursive if need to update scalars on many meshes
              for m in mesh:
                  self.update_scalars(scalars, mesh=m, render=False)
              if render:
                  self.ren_win.Render()
              return
  
          if isinstance(scalars, str):
              # Grab scalar array if name given
              scalars = get_scalar(mesh, scalars)
  
          if scalars is None:
              if render:
                  self.ren_win.Render()
              return
  
          if scalars.shape[0] == mesh.GetNumberOfPoints():
              data = mesh.GetPointData()
          elif scalars.shape[0] == mesh.GetNumberOfCells():
              data = mesh.GetCellData()
          else:
              _raise_not_matching(scalars, mesh)
  
          vtk_scalars = data.GetScalars()
          if vtk_scalars is None:
              raise Exception('No active scalars')
          s = VN.vtk_to_numpy(vtk_scalars)
          s[:] = scalars
          data.Modified()
          try:
              # Why are the points updated here? Not all datasets have points
              # and only the scalar array is modified by this function...
              mesh.GetPoints().Modified()
          except:
              pass
  
          if render:
              self.ren_win.Render()
docs: Updates scalars of the an object in the plotter.
  
          Parameters
          ----------
          scalars : np.ndarray
              Scalars to replace existing scalars.
  
          mesh : vtk.PolyData or vtk.UnstructuredGrid, optional
              Object that has already been added to the Plotter.  If
              None, uses last added mesh.
  
          render : bool, optional
              Forces an update to the render window.  Default True.