使用matplotlib在Python中绘制数据

问题描述:

我目前正在阅读“Machine Learning in Action”。 在回归的第8章, 第158页,很少有代码将原始数据点和拟合线绘制在一起。使用matplotlib在Python中绘制数据

import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.scatter(xMat[:,1].flatten().A[0] , yMat.T[:, 0].flatten().A[0]) 

xCopy = xMat.copy() 
xCopy.sort(0) 
yHat = xCopy*ws 
ax.plot(xCopy[:,1], yHat) 
plt.show() 

xCopy和yHat都是由numpy定义的矩阵对象。

当我使用Python 3.2,运行此代码抛出错误:

Traceback (most recent call last): 
    File "F:\ML\AC\Regression.py", line 44, in <module> 
    ax.plot(xCopy[:,1], yHat) 
    File "C:\Python32\lib\site-packages\matplotlib\axes.py", line 3998, in plot 
    for line in self._get_lines(*args, **kwargs): 
    File "C:\Python32\lib\site-packages\matplotlib\axes.py", line 332, in _grab_next_args 
    for seg in self._plot_args(remaining, kwargs): 
    File "C:\Python32\lib\site-packages\matplotlib\axes.py", line 291, in _plot_args 
    linestyle, marker, color = _process_plot_format(tup[-1]) 
    File "C:\Python32\lib\site-packages\matplotlib\axes.py", line 99, in _process_plot_format 
    if fmt.find('--')>=0: 
AttributeError: 'matrix' object has no attribute 'find' 

但使用Python 2.7,完全相同的代码片段工作正常。 numpy for 2.7和3.2, 或matplotlib库是否已将syntex从2.7更改为Python 3?

+0

matplotlib是在2.7中开发的,python3版本是通过'2to3'生成的,所以界面不会改变。你可以添加一些数据来使其可运行吗? – tacaswell 2013-05-01 13:33:56

+0

它看起来像'plot'如何分裂你给它的参数。你应该用这个打开一个github问题。 – tacaswell 2013-05-01 14:09:31

+0

数据源可在这里找到:http://www.manning.com/pharrington/MLiA_SourceCode.zip – Peorth 2013-05-01 15:44:32

Python 3支持matplotlib is very new,所以你可能会遇到一些错误 - 这是其中之一。

正如你已经认识到的,numpy和matplotlib对python 2.X的支持是很好的,所以如果你不想遇到更多隐藏的'特性',我会坚持。