class_docstr: !
  @brief Common cluster visualizer for 1-, 2- and 3-dimensional data.
  @details `cluster_visualizer_multidim` visualizer can be used to display clusters in N-dimensional data.
  
  The general difference between `cluster_visualizer` and `cluster_visualizer_multidim` is a way of representation
  of 3-dimensional data. In case of `cluster_visualizer` 3-dimensional data is displayed in 3-dimensional plot with
  `x0`, `x1` and `x2` axis. In case of `cluster_visualizer_multidim` it displayed on three 2-dimensional plots:
  `(x0, x1)`, `(x0, x2)` and `(x1, x2)`.
  
  There is an example where sample `Atom` is used for clustering and displayed by `cluster_visualizer`:
  @code
      from pyclustering.utils import read_sample
      from pyclustering.samples.definitions import FCPS_SAMPLES
      from pyclustering.cluster import cluster_visualizer
      from pyclustering.cluster.dbscan import dbscan
  
      sample = read_sample(FCPS_SAMPLES.SAMPLE_ATOM)
      clusters = dbscan(sample, 15, 3).process().get_clusters()
  
      visualizer = cluster_visualizer()
      visualizer.append_clusters(clusters, sample)
      visualizer.show()
  @endcode
  
  Visualized clustering results of `Atom` data:
  @image html dbscan_atom_visualizer.png "Fig. 1. DBSCAN clustering results (3-dimensional data 'Atom')."
  
  @see cluster_visualizer_multidim
docstr: !
  @brief Appends cluster to canvas for drawing.
  
  @param[in] cluster (array_like): cluster that may consist of indexes of objects from the data or object itself.
  @param[in] data (array_like): If defines that each element of cluster is considered as a index of object from the data.
  @param[in] canvas (uint): Number of canvas that should be used for displaying cluster.
  @param[in] marker (string): Marker that is used for displaying objects from cluster on the canvas.
  @param[in] markersize (uint): Size of marker.
  @param[in] color (string): Color of marker.
  
  @return Returns index of cluster descriptor on the canvas.
docstr_tok: ["!","@","brief","Appends","cluster","to","canvas","for","drawing",".","@","param","[","in","]","cluster","(","array_like",")",":","cluster","that","may","consist","of","indexes","of","objects","from","the","data","or","object","itself",".","@","param","[","in","]","data","(","array_like",")",":","If","defines","that","each","element","of","cluster","is","considered","as","a","index","of","object","from","the","data",".","@","param","[","in","]","canvas","(","uint",")",":","Number","of","canvas","that","should","be","used","for","displaying","cluster",".","@","param","[","in","]","marker","(","string",")",":","Marker","that","is","used","for","displaying","objects","from","cluster","on","the","canvas",".","@","param","[","in","]","markersize","(","uint",")",":","Size","of","marker",".","@","param","[","in","]","color","(","string",")",":","Color","of","marker",".","@","return","Returns","index","of","cluster","descriptor","on","the","canvas","."]
code: def append_cluster(
      self,
      cluster,
      data=None,
      canvas=0,
      marker=".",
      markersize=None,
      color=None,
  ):
      """!
      @brief Appends cluster to canvas for drawing.
  
      @param[in] cluster (array_like): cluster that may consist of indexes of objects from the data or object itself.
      @param[in] data (array_like): If defines that each element of cluster is considered as a index of object from the data.
      @param[in] canvas (uint): Number of canvas that should be used for displaying cluster.
      @param[in] marker (string): Marker that is used for displaying objects from cluster on the canvas.
      @param[in] markersize (uint): Size of marker.
      @param[in] color (string): Color of marker.
  
      @return Returns index of cluster descriptor on the canvas.
  
      """
  
      if len(cluster) == 0:
          return
  
      if canvas > self.__number_canvases or canvas < 0:
          raise ValueError(
              "Canvas index '%d' is out of range [0; %d]."
              % self.__number_canvases
              or canvas
          )
  
      if color is None:
          index_color = len(self.__canvas_clusters[canvas]) % len(
              color_list.TITLES
          )
          color = color_list.TITLES[index_color]
  
      added_canvas_descriptor = canvas_cluster_descr(
          cluster, data, marker, markersize, color
      )
      self.__canvas_clusters[canvas].append(added_canvas_descriptor)
  
      if data is None:
          dimension = len(cluster[0])
          if self.__canvas_dimensions[canvas] is None:
              self.__canvas_dimensions[canvas] = dimension
          elif self.__canvas_dimensions[canvas] != dimension:
              raise ValueError(
                  "Only clusters with the same dimension of objects can be displayed on canvas."
              )
  
      else:
          dimension = len(data[0])
          if self.__canvas_dimensions[canvas] is None:
              self.__canvas_dimensions[canvas] = dimension
          elif self.__canvas_dimensions[canvas] != dimension:
              raise ValueError(
                  "Only clusters with the same dimension of objects can be displayed on canvas."
              )
  
      if (dimension < 1) or (dimension > 3):
          raise ValueError(
              "Only 1-, 2- and 3-dimensional data can be displayed. Please, use "
              "'cluster_visualizer_multidim' for visualization."
          )
  
      if markersize is None:
          if (dimension == 1) or (dimension == 2):
              added_canvas_descriptor.markersize = (
                  self.__default_2d_marker_size
              )
          elif dimension == 3:
              added_canvas_descriptor.markersize = (
                  self.__default_3d_marker_size
              )
  
      return len(self.__canvas_clusters[canvas]) - 1
  
imports: import itertools
  import math
  import matplotlib.pyplot
  import matplotlib.gridspec
  from mpl_toolkits.mplot3d import Axes3D
  from pyclustering.utils.color import color
label_desc: Use image node_id 2 for calling the cluster_visualizer obj's underlying member method code with example usage: obj.append_cluster(cluster, data, canvas, marker, markersize, color) and returns: unknown