假设我们有一组二维数据:
x y label
3.542485 1.977398 -1
3.018896 2.556416 -1
7.551510 -1.580030 1
2.114999 -0.004466 -1
8.127113 1.274372 1
7.108772 -0.986906 1
8.610639 2.046708 1
2.326297 0.265213 -1
... ... ...
如何使用matplotlib画出以label为标记的二维分布图?
1、将 x、y两列读入二维数组中,label读入一维数组中
def loadDataSet(fileName):
dataArr = []; labelArr = []
fr = open(fileName)
for line in fr.readlines():
lineArr = line.strip().split('\t')
dataArr.append([float(lineArr[0]), float(lineArr[1])])
labelArr.append(float(lineArr[2]))
return dataArr,labelArr
2、遍历labelArr,按照labelArr[i]将dataArr[i][0..1]分别放到2个数组中,如当labelArr[0]==-1,则将dataArr[0]加到typen1_x中,将dataArr[1]加到typen1_y中的。
以适配axes的scatter方法
for i in range(len(labelArr)):
if labelArr[i]==1:
typep1_x.append(dataArr[i][0])
typep1_y.append(dataArr[i][1])
if labelArr[i]==-1:
typen1_x.append(dataArr[i][0])
typen1_y.append(dataArr[i][1])
3、画图
fig=plt.figure()
axes=fig.add_subplot(111)
typep1=axes.scatter(typep1_x,typep1_y,c='y',marker='s')
typen1=axes.scatter(typen1_x,typen1_y,c='r',marker='o')
plt.xlabel('x')
plt.ylabel('y')
axes.legend((typep1,typen1),('positive','negative'))
plt.show()
结果如下:
之前一直在想怎么根据label的不同画出不一样的点,直到看到了这个回答:
https://www.zhihu.com/question/37146648