class_docstr: Displays a surface plot on a regular x,y grid
  
  Parameters
  ----------
  x : ndarray | None
      1D/2D array of values specifying the x positions of vertices in the
      grid. In case 1D array given as input, the values will be replicated
      to fill the 2D array of size(z). If None, values will be assumed to
      be integers.
  y : ndarray | None
      1D/2D array of values specifying the y positions of vertices in the
      grid. In case 1D array given as input, the values will be replicated
      to fill the 2D array of size(z). If None, values will be assumed to
      be integers.
  z : ndarray
      2D array of height values for each grid vertex.
  colors : ndarray
      (width, height, 4) array of vertex colors.
  
  Notes
  -----
  All arguments are optional.
  
  Note that if vertex positions are updated, the normal vectors for each
  triangle must be recomputed. This is somewhat expensive if the surface
  was initialized with smooth=False and very expensive if smooth=True.
  For faster performance, initialize with compute_normals=False and use
  per-vertex colors or a material that does not require normals.
code: def _update_x_data(self, x):
      if x is not None:
          if self._x is None or len(x) != len(self._x):
              self.__vertices = None
          self._x = x
  
file_path: vispy/vispy/visuals/surface_plot.py
imports: from __future__ import division
  import numpy
  from .mesh import MeshVisual
  from ..geometry import MeshData
label_desc: Use image node_id 2 for calling the SurfacePlotVisual obj's underlying member method code with example usage: obj._update_x_data(x) without return types