matplotlib初步学习

matplotlib学习

使用matplotlib.pylab库画图

  • matplotlib可以用来作为机器学习可视化的作图工具,在这里简单记录一下常用的一些画图方法。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    plt.figure()后到下一个plt.figure()前为同一张图的操作。
    plt.grid(True) #加入网格
    plt.plot(x,y) #图形中加入对点(x,y)的观察
    plt.figure(num=标题数字,figsize=(长,宽),linewidth=1,linestyle=’--’,c=’red’)
    plot.xlim((1,2))
    plot.ylim((3,4))#横纵坐标范围
    plt.xlabel('x axis label')
    plt.ylabel('y axis label')
    figure(figsize=(8,6),dpi=80) #创建一个长宽为8*6的图,设置分辨率为80
    subplot(2,3,n)创建一个2*3的网格图,接下来的图样会在其第n块显示
    savefig(“1.jpg”,dpi=80) #存图
    plt.ytick([-2,-1,0,1],
    [‘bad2’,’bad1’,’ok’,’good’])
    #对坐标打标记
    画图时构造x、y序列:
    x=np.array([i/10.0 for i in range(-50,50,1)])
    x=np.array([i for i in range(-10,10,1)])
    x=linspace(-10,10,1000)
    * 折线图
    plt.plot(X,Y) 直接描点为折线图,当点数足够多时,折线会成为曲线。
    配合使用linspace画图:
    x=linspace(-5,5,50); #生成一维点
    y=x**2; #输入公式
    plot.plot(x ,y) #画图
    * 散点图
    plt.scatter(X,Y,s=75,c=函数,alpha=0.5)
    s:size
    c:color(或直接写color,可以不用管IDE显示红色的情况,内部有color属性)
    alpha:透明度
    * 柱状图
    plt.bar(X,Y,facecolor=””,edgecolor=’white’)
    * 等高线图 用于三维数据
    plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
    '''
    8:等高线数
    f(X,Y):高度(X,Y的映射值),alpha:透明度,cmap:colormap,颜色映射类型(样式)
    plt.clabel(C,inline=True,fontsize=10)
    其中C为实例,使用 C= plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)获取
    注意:f(X,Y)必须为长方形矩阵(内部代码实现),所以需要映射一定量的长方形布局的点再计算其值
    '''

使用等高线画决策边界

1
2
3
4
5
6
x1_min, x1_max = x_test[:, 0].min() - 1, x_test_de[:, 0].max() + 1
x2_min, x2_max = x_test[:, 1].min() - 1, x_test_de[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.01), np.arange(x2_min, x2_max, 0.01))
Z = classifier.predict(mypca.inverse_transform(np.array([xx1.ravel(), xx2.ravel()]).T))
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)

点颜色映射

1
2
3
4
5
6
7
from matplotlib.colors import ListedColormap
...
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
for idx, cl in enumerate(np.unique(y)):
plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8, c=cmap(idx), label=cl)

三维图的创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from mpl_toolkits.mplot3d import Axes3D
import itertools
...
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
'''
A = X
B = Y
Z = np.array(Z)
'''
Z = Z.flatten()
C = np.array([i for i in itertools.product(A, B)])
A = C[:, 0]
B = C[:, 1]
ax.plot_trisurf(A, B, Z, cmap='rainbow')
plt.show()

图像填色

1
2
3
4
5
6
7
8
9
10
'''
填充与坐标轴之间的图形
'''
plt.fill(x, y, color = "g", alpha = 0.3)
'''
填充两曲线之间的空间
'''
plt.fill_between(x, y1, y2, facecolor = "yellow")
plt.fill_between(x, y1, y2, where= y1 >= y2, facecolor = "blue", interpolate= True)
plt.fill_between(x, y1, y2, where= y2 > y1, facecolor = "yellow", interpolate= True)