class_docstr: Principal Component Analysis (PCA).
  
  Parameters
  ----------
  rescale_with_mean
      Whether or not to subtract each column's mean before performing SVD.
  rescale_with_std
      Whether or not to standardize each column before performing SVD.
  n_components
      The number of principal components to compute.
  n_iter
      The number of iterations used for computing the SVD.
  copy
      Whether nor to perform the computations inplace.
  check_input
      Whether to check the coherence of the inputs or not.
code: def plot(
      self,
      X,
      x_component=0,
      y_component=1,
      color_rows_by=None,
      show_row_markers=True,
      show_column_markers=True,
      show_row_labels=False,
      show_column_labels=False,
      row_labels_column=None,
  ):
      row_params = {
          "tooltip": (
              X.index.names
              if isinstance(X.index, pd.MultiIndex)
              else [
                  X.index.name or "index"
              ]  # index is the default name
          )
          + [
              f"component {x_component}",
              f"component {y_component}",
          ]
      }
      if color_rows_by:
          row_params["color"] = color_rows_by
  
      eig = self._eigenvalues_summary.to_dict(orient="index")
  
      row_chart_markers = None
      row_chart_labels = None
      column_chart_markers = None
      column_chart_labels = None
  
      if show_row_markers or show_row_labels:
          row_coords = self.row_coordinates(X)
          row_coords.columns = [
              f"component {i}" for i in row_coords.columns
          ]
          row_labels = (
              pd.Series(
                  row_coords.index.get_level_values(
                      row_labels_column or row_coords.index.names[0]
                  ),
                  index=row_coords.index,
              )
              if isinstance(row_coords.index, pd.MultiIndex)
              else pd.Series(row_coords.index, index=row_coords.index)
          )
  
          row_chart = alt.Chart(
              row_coords.assign(label=row_labels).reset_index()
          ).encode(
              alt.X(
                  f"component {x_component}",
                  scale=alt.Scale(zero=False),
                  axis=alt.Axis(
                      title=f"component {x_component} — {eig[x_component]['% of variance'] / 100:.2%}"
                  ),
              ),
              alt.Y(
                  f"component {y_component}",
                  scale=alt.Scale(zero=False),
                  axis=alt.Axis(
                      title=f"component {y_component} — {eig[y_component]['% of variance'] / 100:.2%}"
                  ),
              ),
              **row_params,
          )
          row_chart_markers = row_chart.mark_circle(
              size=50 if show_row_markers else 0
          )
          if show_row_labels:
              row_chart_labels = row_chart.mark_text().encode(
                  text="label:N"
              )
  
      if show_column_markers or show_column_labels:
          column_coords = self.column_coordinates_.copy()
          column_coords.columns = [
              f"component {i}" for i in column_coords.columns
          ]
          # Scale the column coordinates to the row coordinates
          column_coords = column_coords * row_coords.abs().max()
          column_labels = pd.Series(
              column_coords.index, index=column_coords.index
          )
  
          column_chart = alt.Chart(
              column_coords.assign(label=column_labels).reset_index()
          ).encode(
              alt.X(
                  f"component {x_component}",
                  scale=alt.Scale(zero=False),
              ),
              alt.Y(
                  f"component {y_component}",
                  scale=alt.Scale(zero=False),
              ),
              tooltip=["variable"],
          )
          column_chart_markers = column_chart.mark_square(
              color="green", size=50 if show_column_markers else 0
          )
          if show_column_labels:
              column_chart_labels = column_chart.mark_text().encode(
                  text="label:N"
              )
  
      charts = filter(
          None,
          (
              row_chart_markers,
              row_chart_labels,
              column_chart_markers,
              column_chart_labels,
          ),
      )
  
      return alt.layer(*charts).interactive()
  
imports: from __future__ import annotations
  import functools
  import altair
  import numpy
  import pandas
  import sklearn.base
  import sklearn.utils
  from sklearn import preprocessing
  from prince import svd, utils
label_desc: Use image node_id 15 for calling the PCA obj's underlying member method code with example usage: obj.plot(X, x_component, y_component, color_rows_by, show_row_markers, show_column_markers, show_row_labels, show_column_labels, row_labels_column) and returns: alt