在机器学习中,经常需要通过散点图查看原始数据的分布情况,从而对特征和算法的选择进行初步判断。
散点图可以形象展示直角坐标系中两个变量之间的关系。在散点图中 ,每个数据点的位置实际上就是两个变量的值。变量间的任何关系都可以拿散点图来表示。
matplotlib绘图功能模仿MATLAB,非常方便和强大。下面,本文将详细介绍如何使用matplotlib画出好看实用的散点图。
如果你对matplotlib完全不熟悉,可以先花10分钟去我的另一篇博客学习一下基本操作:
10分钟带你从零上手matplotlib数据可视化
需要进一步深入了解的朋友可以查看 matplotlib.pyplot.scatter 官方文档
import matplotlib.pyplot as plt
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=None, edgecolors=None, *, data=None, **kwargs)
shape(n,)
,表示每个点的横、纵坐标shape(n,)
,表示每个点标记的大小,可选,默认为[‘lines.markersize’] ** 2'^', '*', 'o','+','x'
,shape(n,)
,表示标记的边框线宽,默认为Noneimport matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
plt.scatter(x, y, s=[10, 20, 50, 100], c=['r', 'y', 'g', 'b'])
plt.show()
从图中可以看出来,的确是s控制了每个点的大小,c控制了每个点的颜色。
下面我们先用sklearn中经典的iris分类数据画一个二维散点图
from sklearn import datasets
import matplotlib.pyplot as plt
#从sklearn中获取经典的iris数据
iris = datasets.load_iris() #iris.data为150x4矩阵
x1 = iris.data[:, 1] #获取第二列特征值
x2 = iris.data[:, 2] #获取第三列特征值
y = iris.target #y是分类值:0,1,2
plt.scatter(x1, x2, c=y) #将y作为参数传给c能够很方便的区分不同类别的颜色
plt.title('Iris Classification')
plt.xlabel('Petal length')
plt.ylabel('Petal width')
plt.show()
Matplotlib 绘制 3D 图像主要通过 mpl_toolkits.mplot3d 模块实现,但由于三维图像实际上是在二维画布上展示,因此同样需要载入 pyplot 模块。
备注:mpl_toolkits.mplot3d这个模块不需要另外安装,matplotlib中已自带。
Axes3D.scatter(xs, ys, zs=0, zdir='z', s=20, c=None,
depthshade=True, *args, **kwargs)
还是用上面的数据,我们取iris.data中前三个特征画散点图
from sklearn import datasets
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#从sklearn中获取经典的iris数据
iris = datasets.load_iris() #iris.data为150x4矩阵
x1 = iris.data[:, 0] #获取第1列特征值
x2 = iris.data[:, 1] #获取第2列特征值
x3 = iris.data[:, 2] #获取第3列特征值
y = iris.target #y是分类值:0,1,2
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x1, x2, x3, c=y)
plt.show()