title: How to fix cm.spectral (module 'matplotlib.cm' has no attribute 'spectral')?
body: <p>I tried running the code from the website <a href="https://plot.ly/scikit-learn/plot-kmeans-silhouette-analysis/" rel="noreferrer">https://plot.ly/scikit-learn/plot-kmeans-silhouette-analysis/</a>. when i run it turns out the matplotlib module already does not have spectral attribute. I read inforum another attribute has been omitted. how do i replace it? I've tried c.get_cmp, cm.nipy_sepctral, plt.cm.spectral. but still an error. This is all of code : </p>
  
  <pre><code>import plotly.plotly as py
  import plotly.graph_objs as go
  from plotly import tools
  
  from __future__ import print_function
  
  from sklearn.datasets import make_blobs
  from sklearn.cluster import KMeans
  from sklearn.metrics import silhouette_samples, silhouette_score
  
  import matplotlib
  import matplotlib.pyplot as plt
  import matplotlib.cm as cm
  import numpy as np
  
  print(__doc__)
  
  # This particular setting has one distinct cluster and 3 clusters placed close
  # together.
  X, y = make_blobs(n_samples=500,
                    n_features=2,
                    centers=4,
                    cluster_std=1,
                    center_box=(-10.0, 10.0),
                    shuffle=True,
                    random_state=1)  # For reproducibility
  
  range_n_clusters = [2, 3, 4, 5, 6]
  
  figures = []
  
  for n_clusters in range_n_clusters:
      # Create a subplot with 1 row and 2 columns
      fig = tools.make_subplots(rows=1, cols=2,
                                print_grid=False,
                                subplot_titles=('The silhouette plot for the various clusters.',
                                                'The visualization of the clustered data.'))
  
      # The 1st subplot is the silhouette plot
      # The silhouette coefficient can range from -1, 1 but in this example all
      # lie within [-0.1, 1]
      fig['layout']['xaxis1'].update(title='The silhouette coefficient values',
                                     range=[-0.1, 1])
  
      # The (n_clusters+1)*10 is for inserting blank space between silhouette
      # plots of individual clusters, to demarcate them clearly.
      fig['layout']['yaxis1'].update(title='Cluster label',
                                     showticklabels=False,
                                     range=[0, len(X) + (n_clusters + 1) * 10])
  
      # Initialize the clusterer with n_clusters value and a random generator
      # seed of 10 for reproducibility.
      clusterer = KMeans(n_clusters=n_clusters, random_state=10)
      cluster_labels = clusterer.fit_predict(X)
  
      # The silhouette_score gives the average value for all the samples.
      # This gives a perspective into the density and separation of the formed
      # clusters
      silhouette_avg = silhouette_score(X, cluster_labels)
      print("For n_clusters =", n_clusters,
            "The average silhouette_score is :", silhouette_avg)
  
      # Compute the silhouette scores for each sample
      sample_silhouette_values = silhouette_samples(X, cluster_labels)
      y_lower = 10
  
      for i in range(n_clusters):
          # Aggregate the silhouette scores for samples belonging to
          # cluster i, and sort them
          ith_cluster_silhouette_values = \
              sample_silhouette_values[cluster_labels == i]
  
          ith_cluster_silhouette_values.sort()
  
          size_cluster_i = ith_cluster_silhouette_values.shape[0]
          y_upper = y_lower + size_cluster_i
  
          colors = cm.spectral(cluster_labels.astype(float) / n_clusters)
  
          filled_area = go.Scatter(y=np.arange(y_lower, y_upper),
                                   x=ith_cluster_silhouette_values,
                                   mode='lines',
                                   showlegend=False,
                                   line=dict(width=0.5,
                                            color=colors),
                                   fill='tozerox')
          fig.append_trace(filled_area, 1, 1)
  
          # Compute the new y_lower for next plot
          y_lower = y_upper + 10  # 10 for the 0 samples
  
  
      # The vertical line for average silhouette score of all the values
      axis_line = go.Scatter(x=[silhouette_avg],
                             y=[0, len(X) + (n_clusters + 1) * 10],
                             showlegend=False,
                             mode='lines',
                             line=dict(color="red", dash='dash',
                                       width =1) )
  
      fig.append_trace(axis_line, 1, 1)
  
      # 2nd Plot showing the actual clusters formed
      colors = matplotlib.colors.colorConverter.to_rgb(cm.spectral(float(i) / n_clusters))
      colors = 'rgb'+str(colors)
      clusters = go.Scatter(x=X[:, 0], 
                            y=X[:, 1], 
                            showlegend=False,
                            mode='markers',
                            marker=dict(color=colors,
                                       size=4)
                           )
      fig.append_trace(clusters, 1, 2)
  
      # Labeling the clusters
      centers_ = clusterer.cluster_centers_
      # Draw white circles at cluster centers
      centers = go.Scatter(x=centers_[:, 0], 
                           y=centers_[:, 1],
                           showlegend=False,
                           mode='markers',
                           marker=dict(color='green', size=10,
                                       line=dict(color='black',
                                                               width=1))
                          )
  
      fig.append_trace(centers, 1, 2)
  
      fig['layout']['xaxis2'].update(title='Feature space for the 1st feature',
                                     zeroline=False)
      fig['layout']['yaxis2'].update(title='Feature space for the 2nd feature',
                                    zeroline=False)
  
  
      fig['layout'].update(title="Silhouette analysis for KMeans clustering on sample data "
                           "with n_clusters = %d" % n_clusters)
  
      figures.append(fig)
  </code></pre>
  
  <p>and this is an error : </p>
  
  <pre><code>c:\python36\lib\site-packages\plotly\graph_objs\_deprecations.py:318: DeprecationWarning:
  
  plotly.graph_objs.Font is deprecated.
  Please replace it with one of the following more specific types
    - plotly.graph_objs.layout.Font
    - plotly.graph_objs.layout.hoverlabel.Font
    - etc.
  
  AttributeError                            Traceback (most recent call last)
  &lt;ipython-input-20-548945d711c4&gt; in &lt;module&gt;()
       47         y_upper = y_lower + size_cluster_i
       48 
  ---&gt; 49         colors = cm.spectral(cluster_labels.astype(float) / n_clusters)
       50 
       51         filled_area = go.Scatter(y=np.arange(y_lower, y_upper),
  
  AttributeError: module 'matplotlib.cm' has no attribute 'spectral'
  </code></pre>
  
  <p>how do I replace those attributes? especially the lines colors = cm.spectral (cluster_labels.astype (float) / n_clusters)</p>