Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError: 'module' object has no attribute 'cm'

I'm using Python2.7. This is a function from Udacity's Intro to Machine Learning course. When the function is called, a plot is shown. However, there are suppose to be colored regions shown too, and they are not shown.

When I run the script which calls this function, the figure opens. When I close the figure, I see this message:

Traceback (most recent call last):
  File "your_algorithm.py", line 45, in <module>
    prettyPicture(clf, features_test, labels_test)
  File "e:\Projects\Udacity\Intro to Machine Learning\ud120-projects\choose_your_own\class_vis.py", line 22, in prettyPicture
    plt.pcolormesh(xx, yy, Z, cmap=pl.cm.seismic)
AttributeError: 'module' object has no attribute 'cm'

It seemed to me like cm is an attribute of matplotlib from matplotlib cm. Thus, I changed pl to 'plt`. This gets rid of the error message, but the colored regions still do not show up in plot. Thus, I'm less convinced this is correct.

Why are the colored regions not showing up?

Here is the code for the function prettyPicture:

import numpy as np
import matplotlib.pyplot as plt
import pylab as pl

def prettyPicture(clf, X_test, y_test):
    x_min = 0.0; x_max = 1.0
    y_min = 0.0; y_max = 1.0

    # Plot the decision boundary. For that, we will assign a color to each
    # point in the mesh [x_min, m_max]x[y_min, y_max].
    h = .01  # step size in the mesh
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())

    plt.pcolormesh(xx, yy, Z, cmap=pl.cm.seismic)

    # Plot also the test points
    grade_sig = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==0]
    bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==0]
    grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
    bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==1]

    plt.scatter(grade_sig, bumpy_sig, color = "b", label="fast")
    plt.scatter(grade_bkg, bumpy_bkg, color = "r", label="slow")
    plt.legend()
    plt.xlabel("bumpiness")
    plt.ylabel("grade")

    plt.savefig("test.png")
like image 644
user3731622 Avatar asked Jan 27 '16 23:01

user3731622


1 Answers

replace cmap=pl.cm.seismic with cmap=plt.cm.seismic

replace plt.savefig("your_image.png")with

figure = plt.gcf()
plt.show()
plt.draw()
figure.savefig("your_image.png", dpi=100)
like image 142
Haifeng Zhang Avatar answered Sep 19 '22 16:09

Haifeng Zhang