class_docstr: Direct visualization of a feature set.
  
  MultiFeatureVisualiers visualize several features at once, usually in order
  to compare the effectiveness of a subset of features to the superset. This
  type of visualizer provides base functionality for identifying the names of
  the features either directly from the data or from user supplied values. It
  also provides other functionality for feature selection, e.g. ensuring that
  a subset of features is used if specified by the user.
  
  Parameters
  ----------
  ax : matplotlib.Axes, default: None
      The axis to plot the figure on. If None is passed in the current axes
      will be used (or generated if required).
  
  fig : matplotlib Figure, default: None
      The figure to plot the Visualizer on. If None is passed in the current
      plot will be used (or generated if required).
  
  features : list, default: None
      The names of the features specified by the columns of the input dataset.
      This length of this list must match the number of columns in X, otherwise
      an exception will be raised on ``fit()``.
  
  kwargs : dict, optional
      Keyword arguments that are passed to the base class and may influence
      the visualization as defined in other Visualizers.
  
  Attributes
  ----------
  features_ : ndarray, shape (n_features,)
      The names of the features discovered or used in the visualizer that
      can be used as an index to access or modify data in X. If a user passes
      feature names in, those features are used. Otherwise the columns of a
      DataFrame are used or just simply the indices of the data array.
class_docstr_tok: ["Direct","visualization","of","a","feature","set",".","MultiFeatureVisualiers","visualize","several","features","at","once",",","usually","in","order","to","compare","the","effectiveness","of","a","subset","of","features","to","the","superset",".","This","type","of","visualizer","provides","base","functionality","for","identifying","the","names","of","the","features","either","directly","from","the","data","or","from","user","supplied","values",".","It","also","provides","other","functionality","for","feature","selection",",","e.g",".","ensuring","that","a","subset","of","features","is","used","if","specified","by","the","user",".","Parameters","--","--","--","--","--","ax",":","matplotlib.Axes",",","default",":","None","The","axis","to","plot","the","figure","on",".","If","None","is","passed","in","the","current","axes","will","be","used","(","or","generated","if","required",")",".","fig",":","matplotlib","Figure",",","default",":","None","The","figure","to","plot","the","Visualizer","on",".","If","None","is","passed","in","the","current","plot","will","be","used","(","or","generated","if","required",")",".","features",":","list",",","default",":","None","The","names","of","the","features","specified","by","the","columns","of","the","input","dataset",".","This","length","of","this","list","must","match","the","number","of","columns","in","X",",","otherwise","an","exception","will","be","raised","on","``","fit","(",")","``",".","kwargs",":","dict",",","optional","Keyword","arguments","that","are","passed","to","the","base","class","and","may","influence","the","visualization","as","defined","in","other","Visualizers",".","Attributes","--","--","--","--","--","features_",":","ndarray",",","shape","(","n_features",",",")","The","names","of","the","features","discovered","or","used","in","the","visualizer","that","can","be","used","as","an","index","to","access","or","modify","data","in","X",".","If","a","user","passes","feature","names","in",",","those","features","are","used",".","Otherwise","the","columns","of","a","DataFrame","are","used","or","just","simply","the","indices","of","the","data","array","."]
docstr: This method performs preliminary computations in order to set up the
  figure or perform other analyses. It can also call drawing methods in
  order to set up various non-instance related figure elements.
  
  Parameters
  ----------
  X : array-like, shape (n_samples, n_features)
      Feature dataset to be transformed.
  
  y : array-like, shape (n_samples,)
      Optional dependent target data associated with X.
  
  Returns
  -------
  self : MultiFeatureVisualizer
      Returns the visualizer/transformer for use in Pipelines and chaining.
docstr_tok: ["This","method","performs","preliminary","computations","in","order","to","set","up","the","figure","or","perform","other","analyses",".","It","can","also","call","drawing","methods","in","order","to","set","up","various","non-instance","related","figure","elements",".","Parameters","--","--","--","--","--","X",":","array-like",",","shape","(","n_samples",",","n_features",")","Feature","dataset","to","be","transformed",".","y",":","array-like",",","shape","(","n_samples",",",")","Optional","dependent","target","data","associated","with","X",".","Returns","--","--","--","-","self",":","MultiFeatureVisualizer","Returns","the","visualizer\/transformer","for","use","in","Pipelines","and","chaining","."]
code: def fit(self, X, y=None):
      """
      This method performs preliminary computations in order to set up the
      figure or perform other analyses. It can also call drawing methods in
      order to set up various non-instance related figure elements.
  
      Parameters
      ----------
      X : array-like, shape (n_samples, n_features)
          Feature dataset to be transformed.
  
      y : array-like, shape (n_samples,)
          Optional dependent target data associated with X.
  
      Returns
      -------
      self : MultiFeatureVisualizer
          Returns the visualizer/transformer for use in Pipelines and chaining.
      """
      n_columns = X.shape[1]
  
      if self.features is not None:
          # Use the user-specified features with some checking
          # TODO: allow the user specified features to filter the dataset
          if len(self.features) != n_columns:
              raise YellowbrickValueError(
                  (
                      "number of supplied feature names does not match the number "
                      "of columns in the training data."
                  )
              )
  
          self.features_ = np.array(self.features)
  
      else:
          # Attempt to determine the feature names from the input data
          if is_dataframe(X):
              self.features_ = np.array(X.columns)
  
          # Otherwise create numeric labels for each column.
          else:
              self.features_ = np.arange(0, n_columns)
  
      # Ensure super is called and fit is returned
      super(MultiFeatureVisualizer, self).fit(X, y)
      return self
  
imports: import numpy
  import matplotlib
  from yellowbrick.base import Visualizer
  from yellowbrick.utils import is_dataframe
  from yellowbrick.style import resolve_colors
  from yellowbrick.exceptions import NotFitted
  from yellowbrick.utils.target import target_color_type, TargetType
  from yellowbrick.exceptions import YellowbrickKeyError, YellowbrickValueError
  from yellowbrick.style import palettes
  from matplotlib.colors import Normalize
  from sklearn.base import TransformerMixin
label_desc: Use image node_id 2 for calling the MultiFeatureVisualizer obj's underlying member method code with example usage: obj.fit(X, y) and returns: self