机器学习储备(9):matplotlib绘图原理及实例

来源:互联网 发布:php如何加密源码软件 编辑:程序博客网 时间:2024/06/05 19:07

作者:alg-flody

编辑:Emily



matplotlib绘图的基本元素都包括都哪些?常用的绘图API如何应用。本文做个入门介绍吧。




1 基本元素


通过一个大部分都是用默认值的例子,初步认识下matplotlib中图形的基本元素,如下图所示:


import numpy as np

import matplotlib.pyplot as plt

def f(x):

    return 1/(1+np.power(2.17,-x)) 

x = np.arange(-10.0, 10.0, 1)

y = f(x)

xlim(-10, 10)#缩小x轴范围

plt.plot(x, y,marker='o', linestyle=':', color='g') #在第一个子图上面绘制函数

plt.grid() #添加网格

plt.legend("sigmoid")   #添加sigmoid函数

plt.xticks()  #添加x轴的刻度

plt.title("Sigmoid") #标题

plt.show()

大家可以对用着看看各个元素在下图中的显示为如下:




2 核心API,对象和组装

matplotlib 的对象体系非常严谨,为我们提供了巨大的方便性和使用效率。用户在熟悉了核心对象之后,可以轻易的定制图像。


先来看看 Figure类,Axes类,直接调用Figure()构造函数,便得到一个fig实例,然后调用add_axes得到 axes实例。


fig    = plt.figure()  # fig的图像坐标称为Figure坐标(此外还有一个数据坐标)

ax     = fig.add_axes([0.1, 0.1, 0.8, 0.8])


因此,Figure 和 axes 的关系如下图所示,并且Axes对象又能创建xaxis,yaxis,data,title相关对象,其中data是指绘制的函数图像的数据 x1,x2。


尽管data是数据绘图的关键部分,也就是数据本身的图形化显示,但是必须和xaxis, yaxis, title一起,才能真正构成一个绘图区域axes。一个单纯的,无法读出刻度的线是没有意义的。xaxis, yaxis, title合起来构成了数据的辅助部分(data guide)。


这些所有的元素都来自于一个叫做Artist的基类,它们都是逻辑层上的对象,那么在matplotlib中真正完成绘图功能的物理实现层,是canvas对象,它代表了真正进行绘图的后端,英文叫做backend ,Artist必须连接后端绘图程序才能真正在屏幕上绘制出来(或者保存为文件)。我们可以将canvas理解为绘图的物理(或者说硬件)实现。


3 子图绘制


matplotlib支持绘制子图,绘制子图的API为subplot,每次调用一个子图,就会生成一个空的子图,然后再在上面plot,如下图所示:


import numpy as np

import matplotlib.pyplot as plt

def f(x,alfa):

    return 1/(1+np.power(2.17,-alfa*x)) 


x = np.arange(-5.0, 5.0, 0.01)

y = f(x,0.1)

fig = plt.figure()

ax = fig.add_subplot(221) #生成第一个子图

plt.title('sub1')

ax.plot(x, y,linestyle='-',linewidth=2,color='r') #在子图上面绘制函数

ax = fig.add_subplot(222) 

y = f(x,1)

plt.title('sub2')

ax.plot(x, y,linestyle='-.',linewidth=3,color='g')#在子图上面绘制函数

ax = fig.add_subplot(223) 

y = f(x,5)

plt.title('sub3')

ax.plot(x, y,linestyle=':',linewidth=3,color='b') #在子图上面绘制函数

ax = fig.add_subplot(224) 

y = f(x,10)

plt.title('sub4')

ax.plot(x, y) #在子图上面绘制函数

#调整子图的间距,避免每个子图的标题被遮住

fig.tight_layout()

plt.show()


4 散点图加折线图


线性回归模拟一组高斯分布的数据,代码如下所示:

import numpy as np

import matplotlib.pyplot as plt

from sklearn import linear_model

X = np.linspace(-1,1,20)

y = X*0.2+0.1

gerr = np.random.normal(0,0.03,20)

y = y+gerr

plt.scatter(X,y)

la = linear_model.LinearRegression()

X = X.reshape(-1,1)

la.fit(X,y)

plt.plot(X,la.predict(X),color='g')

plt.show()


从回归图中看出,原始分布的数据为散点图所画,通过调用接口scatter,拟合线图调用plot接口绘制。



5 总结


以上我们讨论了用matplotlib绘图的基本原理,包括核心的API,对象等,然后借助两个例子:多个子图,和散点图加折线图绘制在一张图上阐述了上面所说的这些核心绘图元素对象。



让我们看一下远边的大海,和海边优美的风景,放松一下吧!




欢迎关注算《算法channel》


交流思想,注重分析,看重过程,包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战,英语沙龙,定期邀请专家发推。期待您的到来!







原创粉丝点击