content: # Taken from example in scikit-learn examples
  # Authors: Fabian Pedregosa <fabian.pedregosa@inria.fr>
  #          Olivier Grisel <olivier.grisel@ensta.org>
  #          Mathieu Blondel <mathieu@mblondel.org>
  #          Gael Varoquaux
  # License: BSD 3 clause (C) INRIA 2011
  
  import numpy as np
  import matplotlib.pyplot as plt
  from matplotlib import offsetbox
  from sklearn import (manifold, datasets, decomposition, ensemble, lda,
                       random_projection)
  
  def digits_plot():
      digits = datasets.load_digits(n_class=6)
      n_digits = 500
      X = digits.data[:n_digits]
      y = digits.target[:n_digits]
      n_samples, n_features = X.shape
      n_neighbors = 30
  
      def plot_embedding(X, title=None):
          x_min, x_max = np.min(X, 0), np.max(X, 0)
          X = (X - x_min) / (x_max - x_min)
  
          plt.figure()
          ax = plt.subplot(111)
          for i in range(X.shape[0]):
              plt.text(X[i, 0], X[i, 1], str(digits.target[i]),
                      color=plt.cm.Set1(y[i] / 10.),
                      fontdict={'weight': 'bold', 'size': 9})
  
          if hasattr(offsetbox, 'AnnotationBbox'):
              # only print thumbnails with matplotlib > 1.0
              shown_images = np.array([[1., 1.]])  # just something big
              for i in range(X.shape[0]):
                  dist = np.sum((X[i] - shown_images) ** 2, 1)
                  if np.min(dist) < 1e5:
                      # don't show points that are too close
                      # set a high threshold to basically turn this off
                      continue
                  shown_images = np.r_[shown_images, [X[i]]]
                  imagebox = offsetbox.AnnotationBbox(
                      offsetbox.OffsetImage(digits.images[i], cmap=plt.cm.gray_r),
                      X[i])
                  ax.add_artist(imagebox)
          plt.xticks([]), plt.yticks([])
          if title is not None:
              plt.title(title)
  
      n_img_per_row = 10
      img = np.zeros((10 * n_img_per_row, 10 * n_img_per_row))
      for i in range(n_img_per_row):
          ix = 10 * i + 1
          for j in range(n_img_per_row):
              iy = 10 * j + 1
              img[ix:ix + 8, iy:iy + 8] = X[i * n_img_per_row + j].reshape((8, 8))
  
      plt.imshow(img, cmap=plt.cm.binary)
      plt.xticks([])
      plt.yticks([])
      plt.title('A selection from the 64-dimensional digits dataset')
      print("Computing PCA projection")
      pca = decomposition.PCA(n_components=2).fit(X)
      X_pca = pca.transform(X)
      plot_embedding(X_pca, "Principal Components projection of the digits")
      plt.figure()
      plt.matshow(pca.components_[0, :].reshape(8, 8), cmap="gray")
      plt.axis('off')
      plt.figure()
      plt.matshow(pca.components_[1, :].reshape(8, 8), cmap="gray")
      plt.axis('off')
      plt.show()
  