matplotlib中的分散函数

时间:2013-10-25 08:16:46

标签: python numpy matplotlib

from numpy import array
import matplotlib
import matplotlib.pyplot as plt
from fileread import file2matrix
datingDataMat,datingLabels = file2matrix('iris_data.txt')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2],15.0*array(datingLabels), 15.0*array(datingLabels))
plt.show()

此代码显示错误::

TypeError: unsupported operand type(s) for *: 'float' and 'numpy.ndarray'

根据作者的说法,我应该可以根据数据标签生成不同的颜色。

3 个答案:

答案 0 :(得分:3)

数组应包含数值。

>>> 15.0 * array([1,2])
array([ 15.,  30.])

>>> 15.0 * array(['1','2'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'float' and 'numpy.ndarray'

检查datingLabels

的值

答案 1 :(得分:2)

我遇到了类似的问题。这就是我做的。我将标签转换为包含数值。我正在使用python 2.7,不确定3.3版本是否会自动处理它。

newdatLabel = []

表示datLabel中的项目:

if item == 'largeDoses':

    newdatLabel.append(2)

elif item == 'smallDoses':

    newdatLabel.append(1)

elif item == 'didntLike':

    newdatLabel.append(0)

答案 2 :(得分:2)

这是另一种方法

作者提供了datingTestSet2.txt

你可以在这里下载(我假设你已经完成了)

http://www.manning.com/pharrington/

您可以在此文件中找到列的值为数字

但仍然约会标签上充满了字符串值,如[&#39; 3&#39;,&#39; 2&#39;,&#39; 1&#39;,.....]

所以15.0 *数组(datingLabels)不起作用

要转换数组的类型,请使用.astype()方法

喜欢 15.0 *数组(datingLabels).astype(float)

from numpy import array 
import matplotlib
import matplotlib.pyplot as plt
from fileread import file2matrix
datingDataMat,datingLabels = file2matrix('datingDataTest2.txt')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2],15.0*array(datingLabels).astype(float), 15.0*array(datingLabels).astype(float))
plt.show()

它应该有效!