2016-01-27 2 views
4

Я использую Python2.7. Это функция от курса Intro to Machine Learning от Udacity. Когда функция вызывается, отображается график. Тем не менее, предполагается, что также будут показаны окрашенные области, и они не показаны.AttributeError: объект 'module' не имеет атрибута 'cm'

Когда я запускаю скрипт, который вызывает эту функцию, открывается цифра. Когда я закрываю фигуру, я вижу это сообщение:

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' 

Мне казалось, как cm является атрибутом matplotlib от matplotlib cm. Таким образом, я изменил pl на «plt». Это избавляет от сообщения об ошибке, но цветные области по-прежнему не отображаются в сюжете. Таким образом, я менее убежден, что это правильно.

Почему окрашенные области не отображаются?

Вот код для функции 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") 

ответ

4

заменить cmap=pl.cm.seismic с cmap=plt.cm.seismic

заменить plt.savefig("your_image.png") с

figure = plt.gcf() 
plt.show() 
plt.draw() 
figure.savefig("your_image.png", dpi=100) 
+0

Вид смущен, но спасибо. По крайней мере, я нашел ошибку «pl». В моем сценарии у меня был сюжет, показывающий данные перед вызовом 'prettyPicture', и я думал, что это был сюжет от' prettyPicture'. – user3731622

Смежные вопросы