牛骨文教育服务平台(让学习变的简单)
博文笔记

matplotlib画二维分布图

创建时间:2017-12-25 投稿人: 浏览次数:726

假设我们有一组二维数据:

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("	")
        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


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。