class_docstr: Conducts NMF and holds the models and components 
class_docstr_tok: ["Conducts","NMF","and","holds","the","models","and","components"]
code: def plot(self, n_components=3):
      for idx, comp in enumerate(self.components):
          #     print('Layer {} components'.format(idx), 'Variance: {}'.format(lm.variances[idx][:n_components]))
          print("Layer {} components".format(idx))
          comp = comp[:n_components, :].T
  
          #     plt.figure(figsize=(16,2))
          fig, ax1 = plt.subplots(1)
          plt.subplots_adjust(wspace=0.4)
          fig.set_figheight(2)
          fig.set_figwidth(17)
          #     fig.tight_layout()
          # PCA Line plot
          ax1.plot(comp)
          ax1.set_xticks(range(len(self.tokens)))
          ax1.set_xticklabels(self.tokens, rotation=-90)
          ax1.legend(
              [
                  "Component {}".format(i + 1)
                  for i in range(n_components)
              ],
              loc="center left",
              bbox_to_anchor=(1.01, 0.5),
          )
  
          plt.show()
  
imports: import os
  import json
  import ecco
  from IPython import display
  from ecco import util, lm_plots
  import random
  import matplotlib.pyplot
  import numpy
  import torch
  from torch.nn import functional
  from sklearn import decomposition
  from typing import Dict, Optional, List, Tuple, Union
  from ecco.util import strip_tokenizer_prefix, is_partial_token
label_desc: Use image node_id 4 for calling the NMF obj's underlying member method code with example usage: obj.plot(n_components) without return types