Matplotlib简述:
Matplotlib是一个用于创建出高质量图表的桌面绘图包(主要是2D方面)。该项目是由JohnHunter于2002年启动的,其目的是为Python构建一个MATLAB式的绘图接口。如果结合PythonIDE使用比如PyCharm,matplotlib还具有诸如缩放和平移等交互功能。它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量(vector)和光栅(raster)图:PDF、SVG、JPG、PNG、BMP、GIF等。此外,matplotlib还有许多插件工具集,如用于3D图形的mplot3d以及用于地图和投影的basemap。
准备数据:从文本文件中解析数据
本文使用的数据主要包含以下三种特征:每年获得的飞行常客里程数,玩视频游戏所耗时间百分比,每周消费的冰淇淋公升数。其中分类结果作为文件的第四列,并且只有3、2、1三种分类值。
飞行里程数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...... |
|
|
|
上述特征数据的格式经过file2matrix函数解析处理之后,可输出为矩阵和类标签向量。
将文本记录转换为Numpy的解析程序:
使用file2matrix读取文件数据,必须确保待解析文件存储在当前的工作目录中。导入数据之后,简单检查一下数据格式:
分析数据:使用Matplotlib创建散点图
编辑kNN.py文件,引入matplotlib,调用matplotlib的scatter绘制散点图。
1
2
3
4
5
6
7
8
9
10
|
import matplotlib
import matplotlib.pyplot as plt
def file2matrix(filename):
......
return returnMat,classLabelVector
datingDataMat,datingLabels = file2matrix( 'datingTestSet2.txt' )
fig = plt.figure()
ax = fig.add_subpot( 111 )
ax.scatter(datingDataMat[:, 1 ],datingDataMat[:, 2 ])
plt.show()
|
散点图使用datingDataMat矩阵的第二、第三列数据,分别表示特征值“玩视频游戏所耗时间百分比”和“每周消费的冰淇淋公升数”。
上图由于没有使用样本分类的特征值,很难看到任何有用的数据模式信息。为了更好理解数据信息,Matplotlib库提供的scatter函数支持个性化标记散点图上的点。调用scatter函数使用下列参数:
1
2
|
ax.scatter(datingDataMat[:, 1 ],datingDataMat[:, 2 ], 15.0 * array(datingLabels), 15.0 * array(datingLabels))
plt.show()
|
上图利用datingLabels存储的类标签属性,在散点图上绘制了色彩不等、尺寸不同的点。因而基本上可以从图中看到数据点所属三个样本分类的区域轮廓。为了得到更好的效果,采用datingDataMat矩阵的属性列1和2展示数据,并以红色的'*'表示类标签1、蓝色的'o'表示表示类标签2、绿色的'+'表示类标签3,修改参数如下:
1
2
3
4
5
6
7
8
9
10
11
|
import numpy as np
......
datingLabels = array(datingLabels)
idx_1 = np.where(datingLabels = = 1 )
p1 = ax.scatter(datingDataMat[idx_1, 0 ],datingDataMat[idx_1:, 1 ],market = '*' ,color = 'r' ,label = '1' ,s = 20
idx_2 = np.where(datingLabels = = 2 )
p2 = ax.scatter(datingDataMat[idx_2, 0 ],datingDataMat[idx_2:, 1 ],market = 'o' ,color = 'b' ,label = '1' ,s = 10
idx_3 = np.where(datingLabels = = 3 )
p3 = ax.scatter(datingDataMat[idx_3, 0 ],datingDataMat[idx_3:, 1 ],market = '+' ,color = 'g' ,label = '1' ,s = 30
plt.legend(loc = 'upper right' )
plt.show()
|
总结
本文简单介绍了Matplotlib,并以实例分析了如何使用Matplotlib库图形化展示数据,最后通过修改matplotlib的scatter函数参数使得散点图的分类区域更加清晰。
希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.sina.com.cn/s/blog_8d249b140102wf3m.html