我正以Python作为突破口,入门机器学习相关知识。出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库。下图是我学习过程中整理的一些概念。

本文将以该图为线索梳理相关概念。

简介

matplotlib是一个2D绘图库,通过它你可以绘制函数曲线、直方图、散点图等各种图像。

Python中使用matplotlib主要用到matplotlib.artist.Artist模块。这个模块定义了很多绘图时用到的类型。

Artists类型可分为两种:基础数据(primitives)代表了标准的我们想绘制的图形对象,比如Line2D、Rectangle、Text、Image等;容器(container)代表了储存以上对象的地方,比如Axis,Axes和Figure。

使用流程

matplotlib标准的使用流程如下:

  1. 创建一个画板(Figure)实例。
  2. 使用画板创建一个或多个轴区实例(Axes)。
  3. 使用轴区实例的相关方法,进行绘图。

例如下面代码:

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10, 10, 0.01)
y = x*x - 5*x + 1
fig = plt.figure() // 创建画板
ax = fig.add_subplot(111) // 创建轴区
ax.plot(x, y, 'r--') // 绘图
plt.show()

效果如下图:

上面例子中我们用了matplotlib.pyplot模块,来创建和展示画板。实际上为了让matplotlib使用起来更靠近类似MATLAB基于命令的形式,这个模块把许多Artist类型的方法进行了封装,组成所谓的The Pyplot API,参考文档。这套API可以让你直接使用pyplot模块进行绘图,而不是使用Artist实例。

下面例子使用The Pyplot API实现了同样的效果:

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10, 10, 0.01)
y = x*x - 5*x + 1
plt.plot(x, y, 'r--')
plt.show()

需要注意:这里直接使用plt.plot函数进行绘图,看起来好像并没有创建Figure和Axes对象。其实不是的,pyplot模块默认创建ID为1的画板,并且在画板中默认创建‘111’轴区实例。所以你就可直接进行绘图。

绘图过程是基于当前上下文进行的。也就是说当前选中的是哪一个画板和哪一个轴区,后续调用的绘图函数就是在这个画板和轴区中进行的。你可以通过给plt.figure()指定ID来创建或切换画板。可以通过plt.subplot()figure.add_subplot()来创建或切换轴区。

解释一下使用plt.subplot()figure.add_subplot()创建Axes时所使用的三位整数组成的参数。假设用xyz代表这三个个位数,则x表示行,y表示列,z为这个x行y列组成的格子中按书写顺序从1开始数下来的第z个。如果超过个位数,传递参数的时候分为独立的三个值进行传递。例如:plt.subplot(10,2,5)

其他

了解这些足够我在机器学习实践中使用了。

在实际应用中可能根据需求的不同选择使用不同的方法绘制图像,如:

  • plot:绘制曲线
  • scatter:绘制散点图
  • hist:绘制直方图
  • imshow:绘制图片
  • ...

作为扩展,可能还需要了解其他的matplotlib模块:

  • mpl_toolkits.mplot3d:3D绘图的扩展工具。
  • matplotlib.cm:定义颜色映射与相关处理函数。
  • matplotlib.mlab:Python数值函数模块,用于兼容MATLAB命令。
  • matplotlib.path:处理折线。
  • matplotlib.patches:用于生成图形元素。
  • ...

本文同步博客

Matplotlib快速入门笔记的更多相关文章

  1. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  2. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  3. C++ 快速入门笔记:进阶编程

    C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...

  4. Pandas快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下提供了类似关系型或标签型数据结构的Pandas的使用方法.下面记录相关学习笔记. 数据结构 Panda ...

  5. NumPy快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法.下面记录相关学习笔记. 简介 NumPy是一个科学计算库.结合Py ...

  6. Spring Boot 快速入门笔记

    Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  7. bootstrap快速入门笔记(八)-按钮,响应式图片

    一,默认样式:.btn-default , .btn-primary , .btn-success  ,.btn-info, btn-warning ,btn-link 二,尺寸:.btn-lg, . ...

  8. bootstrap快速入门笔记(四)-less用法指南, mixin和变量

    一,less变量,less文件 1.bootstrap.less 这是主要的 Less 文件.该文件中导入了一些其他的 less 文件.该文件中没有任何代码. 2.forms.less 这个 Less ...

  9. 阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

随机推荐

  1. BZOJ1078: [SCOI2008]斜堆

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...

  2. HDU Today(最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)     ...

  3. NYoj_171聪明的kk

    聪明的kk 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 聪明的"KK" 非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不 ...

  4. SpringMVC框架学习笔记(3)——controller配置汇总

    1.通过URL对应bean <!-- 配置handlerMapper 映射器 --> <bean class="org.springframework.web.servle ...

  5. 【Git】Git基础操作

    repository:版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以&q ...

  6. 解析Python中的yield关键字

    前言 python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def fun(): for i i ...

  7. VS的无用文件

    目录:C:\ProgramData\Microsoft Visual Studio\10.0\TraceDebugging 每次调试程序都会产生30MB左右大小的Debug文件.如何禁止? Tools ...

  8. java 数据类型间的转换

    byte a = (byte)129; 129已经超过了byte数据类型的存储上限,所以需要在值的前面加括号需要转换的数据类型名. 但是从高往低转的时候数值精度会有丢失; 所以最后结果为 a = -1 ...

  9. LAMP与LNMP架构的区别及其具体的选择说明

    LAMP==Linux+Apache+Mysql+PHP LNMP==Linux+Nginx+Mysql+PHP 以上两只架构是目前网站的主流架构 LAMP和LNMP最主要的区别在于: 一个使用的是A ...

  10. JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化

    运行_JFinalDemoGenerator生成实体类和映射之前的项目结构: 运行之后: 生成和改变的文件: 实体类: package com.wazn.model; import com.wazn. ...