使用python的matplotlib绘制散点图

最近在看《机器学习实战》这本书,用书中的代码画散点图时遇到了一些小问题,查了很多人的文章最后成功画出想要的图形,这里写下过程当做笔记,也给同样遇到问题的同学提供参考。

import matplotlib
import matplotlib.pyplot as plt 
import numpy as np

导入数据

import kNN
datingDateMat,datingLabels = kNN.file2matrix("datingTestSet2.txt")
fig = plt.figure()

add_subplot是画子图函数,add_subplot(a, b, c)表示将画布分成a行b列,图像画在从左往右,从上往下的##第c块

ax = fig.add_subplot(111)

普通的散点图

ax.scatter(datingDateMat[:,1], datingDateMat[:,2])
plt.show()

这里写图片描述
这个散点图使用datingDataMat矩阵的第二、第三列数据,分别表示特征值“玩视频游戏所耗时间百分比”和“每周所消费的冰淇淋公升数”。由于样本没有样本分类的特征值,上图很难看到任何有用的数据模式信息。调用scatter()函数色彩和尺寸参数,scatter(x, y, s = 1, c= ‘g’, marker = ‘s’, linewidths = 0):s代表散点的大小,c代表点的颜色,marker##代表形状,linewidths代表边框宽度,重新画图用如下代码:

ax.scatter(datingDataMat[:,1], datingDataMat[:,2],
s =20*np.array(datingLabels), c =15*np.array(datingLabels) )

这里写图片描述
上图利用颜色及尺寸标识了数据点的属性类别,基本可以看出数据点所属三个列表分类的区域轮廓,但使用datingdataMat矩阵的第一列和第二列属性可以得到更好的展示效果,下面展示这个图形,并通过这个例子讲解如何给散点图添加图例,坐标轴标签,标题等。

plt.figure()

为了添加图例,将三种类别图形数据区分开

type1_x = []
type1_y = []
type2_x = []
type2_y = []
type3_x = []
type3_y = []

用for循环给上面列表填充相应数据

for i in range(len(datingLabels)):
    if datingLabels[i] == 1:
        type1_x.append(datingDataMat[i][0])
        type1_y.append(datingDataMat[i][1])
    if datingLabels[i] == 2:
        type2_x.append(datingDataMat[i][0])
        type2_y.append(datingDataMat[i][1])
    if datingLabels[i] == 3:
        type3_x.append(datingDataMat[i][0])
        type3_y.append(datingDataMat[i][1])

有了数据之后将三类数据依次添加到figure中

plt.scatter(type1_x, type1_y, s = 20, c = 'r', label = u'不喜欢')
plt.scatter(type2_x, type2_y, s = 40, c = 'r', label = u'魅力一般')
plt.scatter(type3_x, type3_y, s = 60, c = 'r', label = u'极具魅力')

添加x.y轴标签

plt.xlabel(u'每年获得的飞行常客里程数')
plt.ylabel(u'玩视频游戏所耗时间百分比')

添加标题

plt.title('figure 3')

添加图例

plt.legend()
plt.show()

这里写图片描述
这样一张带标题、坐标轴标签以及图例的散点图就画好啦!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值