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:

python中的可视化工具——matplotlib模块

 

PS

在写该代码的时候,中途遇到了问题如下:

“ probs = probs.reshape(xx.shape)

AttributeError: 'list' object has no attribute 'reshape'”

将probs打印出来观察

python中的可视化工具——matplotlib模块

因为probs是列表,所以不能用reshape,添加probs = np.array(probs),从列表转换成数组就可以使用reshape了。