无法理解Matplotlib中的代码

时间:2014-10-28 05:08:08

标签: python matplotlib

我知道下面的代码绘制了一个散点图,带有自己的标记。我无法理解转换器功能。

转换器功能的一般定义是: 将列号映射到将该列转换为float的函数的字典。例如,如果第0列是日期字符串:converters = {0:datestr2num}。转换器也可用于为丢失的数据提供默认值(但也请参见genfromtxt):converters = {3:lambda s:float(s.strip()或0)}。默认值:无。

但是我无法理解它在代码中的作用; read_label函数做了什么?

import numpy as np
import matplotlib.pyplot as plt
label_list = (
b'Iris-setosa',
b'Iris-versicolor',
b'Iris-virginica',
)
def read_label(label):
   return label_list.index(label)

data = np.loadtxt('iris.data.txt', delimiter = ',', converters = { 4 : read_label })

marker_set = ('^', 'x', '.')

for i, marker in enumerate(marker_set):
  data_subset = numpy.asarray([x for x in data if x[4] == i])

plt.scatter(data_subset[:,0], data_subset[:,1], color = 'k', marker = marker)
plt.show()

iris.data.txt文件包含以下数据:

4.6,3.2,1.4,0.2,虹膜setosa 5.3,3.7,1.5,0.2,虹膜setosa 5.0,3.3,1.4,0.2,虹膜setosa 7.0,3.2,4.7,1.4,虹膜云芝 6.4,3.2,4.5,1.5,虹膜云芝

1 个答案:

答案 0 :(得分:1)

您可以使用微小的测试程序轻松调查read_label的行为:

label_list = (
b'Iris-setosa',
b'Iris-versicolor',
b'Iris-virginica',
)

def read_label(label):
    return label_list.index(label)

print read_label("Iris-setosa")
print read_label("Iris-versicolor")
print read_label("Iris-virginica")

输出:

0
1
2

或者你look up Python's index method:它返回给定元素的列表索引。

请注意,如果您要求列表中没有元素,则会获得ValueError。在这种情况下,您可能希望使用find