python中的可视化工具——matplotlib模块
matplotlib模块实现函数可视化。
1.安装matplotlib模块
在终端中的安装指令为:sudo pip install matplotlib
2.绘制散点图
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)
- x,y:输入的数据, 格式shape (n, ),散点的位置
- s:散点的大小
- c:表示的是点的颜色,默认是'b'蓝色。可以是一个表示颜色的字符,也可以是一个长度为n的表示颜色的序列。
- marker:表示的是标记的样式,默认的是'o'。
- 后面的不常用,这里就不做说明了。
3.显示图像
plt.show()
4.绘制等高线
告知(x,y)坐标和各点的高度,用levels指定高度的点描上颜色
plt.contour(x,y,z,[level])
- x,y:输入的数据,横纵坐标
- Z : 该点的高度
- level:等高线的高度
5.numpy常用到的函数
返回的是在规定区域以步长为分辨率的行列网格坐标点
xx,yy = np.mgrid[起:止:步长,起:止:步长]
将多维数组降为一维数组
xx.ravel()
收集规定区域内所有的网格坐标点
grid = np.c_[xx.ravel(),yy.ravel()]
Exapmle:
用以上函数画一幅正态随机分布的图像,在以原点为中心的半径为1的圆内点为红色,圆外为蓝色。
#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
rdm = np.random.RandomState(1)
X = rdm.randn(400,2)
Y = [int(x0 * x0 + x1 * x1 < 1) for (x0,x1) in X]
Y_c = [['red' if y else 'blue'] for y in Y]
X = np.vstack(X).reshape(-1,2)
Y = np.vstack(Y).reshape(-1,1)
plt.scatter(X[:,0],X[:,1],c=np.squeeze(Y_c),marker='x')
xx,yy = np.mgrid[-2:2:0.01,-2:2:0.01] # 这样得到的是xx和yy的shape是(400,400)
grid = np.c_[xx.ravel(),yy.ravel()]
probs = [int(x0 * x0 + y0 * y0 < 1) for (x0,y0) in grid]
probs = np.array(probs)
probs = probs.reshape(xx.shape)
plt.contour(xx,yy,probs,levels=[0.5])
plt.show()
Outputs:
PS
在写该代码的时候,中途遇到了问题如下:
“ probs = probs.reshape(xx.shape)
AttributeError: 'list' object has no attribute 'reshape'”
将probs打印出来观察
因为probs是列表,所以不能用reshape,添加probs = np.array(probs),从列表转换成数组就可以使用reshape了。