class_docstr: !
  @brief Visualizer for cluster in multi-dimensional data.
  @details Multi-dimensional cluster visualizer is useful data whose dimension is greater than three, but it
            is able to visualize data with any dimensions. The multidimensional visualizer helps to overcome
            'cluster_visualizer' shortcoming - an ability to display clusters in 1D, 2D or 3D dimensional data
            space only.
  
      Example of clustering results visualization where `Iris` is used:
      @code
          from pyclustering.utils import read_sample
          from pyclustering.samples.definitions import FAMOUS_SAMPLES
          from pyclustering.cluster import cluster_visualizer_multidim
          from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
          from pyclustering.cluster.xmeans import xmeans
  
          # load 4D data sample 'Iris'
          sample_4d = read_sample(FAMOUS_SAMPLES.SAMPLE_IRIS)
  
          # initialize 3 initial centers using K-Means++ algorithm
          centers = kmeans_plusplus_initializer(sample_4d, 3).initialize()
  
          # performs cluster analysis using X-Means
          xmeans_instance = xmeans(sample_4d, centers)
          xmeans_instance.process()
          clusters = xmeans_instance.get_clusters()
  
          # visualize obtained clusters in multi-dimensional space
          visualizer = cluster_visualizer_multidim()
          visualizer.append_clusters(clusters, sample_4d)
          visualizer.show(max_row_size=3)
      @endcode
  
      Visualized clustering results of `Iris` data (multi-dimensional data):
      @image html xmeans_clustering_famous_iris.png "Fig. 1. X-Means clustering results (data 'Iris')."
  
      Sometimes no need to display results in all dimensions. Parameter `filter` can be used to display only
      interesting coordinate pairs. Here is an example of visualization of pair coordinates (x0, x1) and (x0, x2) for
      previous clustering results:
      @code
          visualizer = cluster_visualizer_multidim()
          visualizer.append_clusters(clusters, sample_4d)
          visualizer.show(pair_filter=[[0, 1], [0, 2]])
      @endcode
  
      Visualized results of specified coordinate pairs:
      @image html xmeans_clustering_famous_iris_filtered.png "Fig. 2. X-Means clustering results (x0, x1) and (x0, x2) (data 'Iris')."
  
      The multi-dimensional visualizer can be used to display clusters in 1-, 2- and 3-dimensional data similar to
      `cluster_visualizer`. `cluster_visualizer_multidim` uses three plots to display 3-dimensional data:
      `(x0, x1)`, `(x0, x2)` and `(x1, x2)`. There is an example:
      @code
          from pyclustering.utils import read_sample
          from pyclustering.samples.definitions import FCPS_SAMPLES
          from pyclustering.cluster import cluster_visualizer_multidim
          from pyclustering.cluster.gmeans import gmeans
  
          # load 3-dimensional data sample 'Hepta'
          sample_3d = read_sample(FCPS_SAMPLES.SAMPLE_HEPTA)
  
          # performs cluster analysis using G-Means algorithm
          gmeans_instance = gmeans(sample_3d).process().get_clusters()
  
          # visualize obtained clusters in 3-dimensional space (x0, x1), (x0, x2), (x1, x2):
          visualizer = cluster_visualizer_multidim()
          visualizer.append_clusters(clusters, sample_3d)
          visualizer.show(max_row_size=3)
      @endcode
  
      Visualized clustering results of `Hepta` data (3-dimensional data):
      @image html gmeans_hepta_multidim_visualizer.png "Fig. 3. G-Means clustering results (3-dimensional data 'Hepta')."
  
      Example with 2-dimensional data `Lsun`:
      @code
          # load 2-dimensional data sample 'Lsun'
          sample_2d = read_sample(FCPS_SAMPLES.SAMPLE_LSUN)
          clusters = gmeans(sample_2d).process().get_clusters()
  
          # visualize obtained clusters in 2-dimensional space (x0, x1):
          visualizer = cluster_visualizer_multidim()
          visualizer.append_clusters(clusters, sample_2d)
          visualizer.show()
      @endcode
  
      Visualized clustering results of `Lsun` (2-dimensional data):
      @image html gmeans_lsun_multidim_visualizer.png "Fig. 4. G-Means clustering results (2-dimensional data 'Lsun')."
docstr: !
  @brief Shows clusters (visualize) in multi-dimensional space.
  
  @param[in] pair_filter (list): List of coordinate pairs that should be displayed. This argument is used as a filter.
  @param[in] **kwargs: Arbitrary keyword arguments (available arguments: 'visible_axis' 'visible_labels', 'visible_grid', 'row_size', 'show').
  
  <b>Keyword Args:</b><br>
      - visible_axis (bool): Defines visibility of axes on each canvas, if True - axes are visible.
         By default axis of each canvas are not displayed.
      - visible_labels (bool): Defines visibility of labels on each canvas, if True - labels is displayed.
         By default labels of each canvas are displayed.
      - visible_grid (bool): Defines visibility of grid on each canvas, if True - grid is displayed.
         By default grid of each canvas is displayed.
      - max_row_size (uint): Maximum number of canvases on one row. By default the maximum value is 4.
      - show (bool): If True - then displays visualized clusters. By default is `True`.
docstr_tok: ["!","@","brief","Shows","clusters","(","visualize",")","in","multi-dimensional","space",".","@","param","[","in","]","pair_filter","(","list",")",":","List","of","coordinate","pairs","that","should","be","displayed",".","This","argument","is","used","as","a","filter",".","@","param","[","in","]","*","*","kwargs",":","Arbitrary","keyword","arguments","(","available","arguments",":","'visible_axis","'","'visible_labels","'",",","'visible_grid","'",",","'row_size","'",",","'show","'",")",".","<","b",">","Keyword","Args",":","<","\/b",">","<","br",">","-","visible_axis","(","bool",")",":","Defines","visibility","of","axes","on","each","canvas",",","if","True","-","axes","are","visible",".","By","default","axis","of","each","canvas","are","not","displayed",".","-","visible_labels","(","bool",")",":","Defines","visibility","of","labels","on","each","canvas",",","if","True","-","labels","is","displayed",".","By","default","labels","of","each","canvas","are","displayed",".","-","visible_grid","(","bool",")",":","Defines","visibility","of","grid","on","each","canvas",",","if","True","-","grid","is","displayed",".","By","default","grid","of","each","canvas","is","displayed",".","-","max_row_size","(","uint",")",":","Maximum","number","of","canvases","on","one","row",".","By","default","the","maximum","value","is","4",".","-","show","(","bool",")",":","If","True","-","then","displays","visualized","clusters",".","By","default","is","`","True","`","."]
code: def show(self, pair_filter=None, **kwargs):
      """!
      @brief Shows clusters (visualize) in multi-dimensional space.
  
      @param[in] pair_filter (list): List of coordinate pairs that should be displayed. This argument is used as a filter.
      @param[in] **kwargs: Arbitrary keyword arguments (available arguments: 'visible_axis' 'visible_labels', 'visible_grid', 'row_size', 'show').
  
      <b>Keyword Args:</b><br>
          - visible_axis (bool): Defines visibility of axes on each canvas, if True - axes are visible.
             By default axis of each canvas are not displayed.
          - visible_labels (bool): Defines visibility of labels on each canvas, if True - labels is displayed.
             By default labels of each canvas are displayed.
          - visible_grid (bool): Defines visibility of grid on each canvas, if True - grid is displayed.
             By default grid of each canvas is displayed.
          - max_row_size (uint): Maximum number of canvases on one row. By default the maximum value is 4.
          - show (bool): If True - then displays visualized clusters. By default is `True`.
  
      """
  
      if not len(self.__clusters) > 0:
          raise ValueError(
              "There is no non-empty clusters for visualization."
          )
  
      if self.__clusters[0].data is not None:
          cluster_data = self.__clusters[0].data
      else:
          cluster_data = self.__clusters[0].cluster
  
      dimension = len(cluster_data[0])
  
      acceptable_pairs = pair_filter or []
      pairs = []
      amount_axis = 1
      axis_storage = []
  
      if dimension > 1:
          pairs = self.__create_pairs(dimension, acceptable_pairs)
          amount_axis = len(pairs)
  
      self.__figure = plt.figure()
      self.__grid_spec = self.__create_grid_spec(
          amount_axis, kwargs.get("max_row_size", 4)
      )
  
      for index in range(amount_axis):
          ax = self.__create_canvas(dimension, pairs, index, **kwargs)
          axis_storage.append(ax)
  
      for cluster_descr in self.__clusters:
          self.__draw_canvas_cluster(axis_storage, cluster_descr, pairs)
  
      if kwargs.get("show", True):
          plt.show()
  
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 6 for calling the cluster_visualizer_multidim obj's underlying member method code with example usage: obj.show(pair_filter) without return types