目录

前言

学习matplotlib有一段时间了,总感觉学不到本质的东西,抓不到主要的重点,还是感觉有些吃力,画的图千变万化,总不能一一学会吧,今天我们就来总结一下,matplotlib本质的东西,让我们更能在全局上掌握matplotlib库。

(一)总框架分析

在matplotlib库里,总分成两种绘图方法

  1. 方法一:函数式绘图
  2. 方法二:面向对象式绘图

(二)函数式的绘图

1.说明:

在matplotlib.pyplot里是封装好的函数,用户可以直接调用函数进行绘图。

一般的,我们约定 matplotlib.pyplot 取别名为 plt

其模块下主要定义如下两方面的函数:

  1. 操作类的函数:对于画布,图,子图,坐标轴,图例,背景,网格等的操作。

如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()……

  1. 绘图类的函数:画折线图,散点图,条形图,直方图,饼状图等特点图的绘制函数。

如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……

具体可以参考官方网站

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html?highlight=matplotlib pyplot#module-matplotlib.pyplot

2.函数绘图的缺优点

(1)缺点:

其实函数式的绘图本质上还是在matplotlib对象的封装,在对象的基础上多了一层函数的调用,

其定制性并不是很强,都是封装好的函数。

(2)优点:

适合一般用户绘图,要求不是很高,定制性不是很强的绘图。

新手容易上手,不需要了解内部的对象问题。

3.绘图类的函数

matplotlib绘图不止这些,在此只举例了大部分

序号 绘图函数(plt.xxx) 说明
1 acorr() 绘制x的自相关图
2 angle_spectrum() 绘制角度谱图
3 bar() 制作条形图
4 barbs() 绘制倒钩的二维场图
5 barh() 制作水平条形图。
6 boxplot() 制作一个盒子和胡须图
7 broken_barh() 绘制一个水平的矩形序列图
8 clabel() 绘制等高线图
9 cohere() 绘制xy之间的一致性图
10 csd() 绘制交叉谱密度图
11 eventplot() 绘制相同的平行线
12 fill() 绘制填充多边形图
13 hexbin() 制作六边形分箱图
14 hist() 绘制直方图
15 hist2d() 制作2D直方图
16 magnitude_spectrum() 绘制幅度谱图
17 phase_spectrum() 绘制相位谱图
18 pie() 绘制饼图
19 plot() 绘制折线图
20 plot_date() 绘制包含日期的数据图
21 quiver() 绘制一个二维箭头场图
22 scatter() 绘制散点图
23 specgram() 绘制频谱图
24 stackplot() 绘制堆积区域图
25 streamplot() 绘制矢量流的流线型图
26 triplot() 绘制非结构化三角形网格作为线条图

4.操作类的函数

操作不止这些,在这只是举了大部分

序号 操作函数(plt.xxx) 说明
1 arrow() 向轴添加箭头
2 axes() 控制轴的范围
3 axhline() 在轴上添加水平线
4 axhspan() 在轴上添加水平跨度(矩形)
5 axvline() 在轴上添加垂直线
6 axvspan() 在轴上添加垂直跨度(矩形)
7 box() 打开或关闭轴框
8 figlegend() 在图中放置一个图例
9 figtext() 添加文字到图
10 grid() 配置网格线
11 legend() 在轴上放置图例
12 locator_params() 控制轴的刻度紧密度。
13 loglog() 在x轴和y轴上绘制具有对数缩放的绘图
14 margins() 设置绘图到框的边距
15 minorticks_on() 在轴上显示次要刻度
16 minorticks_off() 从轴上移除次要刻度
17 subplot() 在当前图中添加子图
18 subplot2grid() 在常规网格内的特定位置创建轴
19 subplots() 创建一个图形和一组子图
20 subplots_adjust() 调整子图布局
21 suptitle() 为图中添加居中标题
22 table() 将表添加到当前轴
23 text() 向轴添加文本
24 tick_params() 更改刻度,刻度标签和网格线的外观
25 title() 设置轴的标题
26 twinx() 制作共享x轴的第二
27 twiny() 制作共享y轴的第二个轴
28 xlabel() 设置x轴的标签
29 xlim() 获取或设置当前轴的x限制
30 xscale() 设置x轴刻度
31 xticks() 获取或设置当前刻度线位置和x轴标签
32 ylabel() 设置y轴的标签
33 ylim() 获取或设置当前轴的y限制
34 yscale() 设置y轴刻度
35 yticks() 获取或设置y轴的当前刻度位置和标签

5.例子:

(1)源代码

# 导入模块
import matplotlib.pyplot as plt
import numpy as np # 数据
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2) # 绘图
plt.plot(x, y) # 显示
plt.show()

(2)显示效果

(三)面向对象式的绘图

1.基本概念

面向对象式的绘图,才是matplotlib绘图最自然的方式,不过需要先了解一些基本的概念。

可参考官方介绍:https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

下图是matplotlib基本的组成部分

figure(图形)

axes(子图形)

title(标题)

legend(图例)

Major tick(大标尺刻度)

Minor tick(小标尺刻度)

Major tick label(大标尺刻度数值)

Minor tick label(小标尺刻度数值)

Y axis label(y轴指标说明)

X axis label(x轴指标说明)

Line(线型图)

Markers(数据标注点)

Grid(格子)等等

2.基本对象

(1)Figure

  1. 整个图形即是一个Figure对象,即一个弹出的绘图的窗口,便是一个figure。
  2. Figure对象至少包含一个子图,也就是Axes对象。
  3. Figure对象包含一些特殊的Artist对象,如title标题、图例legend。
  4. Figure对象包含画布canvas对象。 canvas对象一般不可见,通常无需直接操作该对象,matplotlib程序实际绘图时需要调用该对象。

(2)Axes

  1. 字面上理解,axes是数据轴axis的复数,但它并不是指数据轴,而是子图对象。可以这样理解,每一个子图都有x和y轴,axes则用于代表这两个数据轴所对应的一个子图对象。
  2. 常用方法set_xlim()以及set_ylim():
    1. 设置子图x轴和y轴对应的数据范围。
    2. set_title():设置子图的标题。
    3. set_xlabel()以及set_ylable():
    4. 设置子图x轴和y轴指标的描述说明。

(3)Axis

  1. Axis是数据轴对象,主要用于控制数据轴上刻度位置和显示数值。
  2. Axis有Locator和Formatter两个子对象,分别用于控制刻度位置和显示数值。

(4)Artist

  1. 基本上所有的对象都是一个Artist对象,包括Figure对象、Axes对象和Axis对象,可以将Artist理解为一个基本类。
  2. 当提交代码,图像最终呈现时,所有的artist对象都会绘制于canvas画布上

层级结构图:

(yaxis同样有tick, label和tick label,没有画出)

3.面向对象式绘图的缺优

(1)缺点:

对于新手不友好,感念混淆,不易掌握,上手慢。

(2)优点:

可定制性强,灵活,自然,流畅。

4.例子:

(1)源代码

# 导入模块
import matplotlib.pyplot as plt
import numpy as np # 数据
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2) # 创建一张图
fig, ax = plt.subplots(1, 1) plt.plot(x, y) # 显示
plt.show()

(2)输出效果

[图片上传失败...(image-66cc5e-1552302327631)]

参考网站

【1】python matplotlib画图教程学习:使用介绍https://baijiahao.baidu.com/s?id=1614559225877861604&wfr=spider&for=pc

【2】matplotlib核心剖析:https://blog.csdn.net/zchshhh/article/details/78215646

作者:Mark

日期:2019/03/11 周一

4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析的更多相关文章

  1. 3.7Python数据处理篇之Numpy系列(七)---Numpy的统计函数

    目录 目录 前言 (一)函数一览表 (二)统计函数1 (三)统计函数2 目录 前言 具体我们来学Numpy的统计函数 (一)函数一览表 调用方式:np.* .sum(a) 对数组a求和 .mean(a ...

  2. java基础解析系列(七)---ThreadLocal原理分析

    java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  3. java并发系列(七)-----ConcurrentHashMap原理分析(JDK1.8)

    JDK1.8的实现已经摒弃了Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashM ...

  4. 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数

    目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...

  5. 5.6Python数据处理篇之Sympy系列(六)---矩阵的操作

    目录 目录 前言 (一)矩阵的创建-Matrix() 1.说明: 2.源代码: 3.输出: (二)常用的构造矩阵 1.说明: 2.源代码: 3.输出: (三)基本操作 1.说明: 2.源代码: 3.输 ...

  6. 5.5Python数据处理篇之Sympy系列(五)---解方程

    目录 目录 前言 (一)求解多元一次方程-solve() 1.说明: 2.源代码: 3.输出: (二)解线性方程组-linsolve() 1.说明: 2.源代码: 3.输出: (三)解非线性方程组-n ...

  7. 5.4Python数据处理篇之Sympy系列(四)---微积分

    目录 目录 前言 (一)求导数-diff() 1.一阶求导-diff() 2.多阶求导-diff() 3.求偏导数-diff() (二)求积分-integrate() (三)求极限-limit() ( ...

  8. 5.3Python数据处理篇之Sympy系列(三)---简化操作

    目录 5.3简化操作 目录 前言 (一)有理数与多项式的简化 1.最简化-simplify() 2.展开-expand() 3.提公因式-factor() 4.合并同类项-ceiling() 5.简化 ...

  9. 5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作

    目录 目录 前言 (一)符号的初始化与输出设置-symbol() symbols() latex() 1.作用: 2.操作: (二)替换符号-subs(old,new) 1.说明: 2.源代码: 3. ...

随机推荐

  1. 网络扫描工具nmap

    nmap一般就用来扫描主机是否在线(特别是扫描局域网内存活的机器).开放了哪些端口.其他的功能用的比较少,做渗透的人可能要了解的多些. 1.1 选项说明 nmap需要自行安装. shell> y ...

  2. Perl中的执行上下文

    perl中的上下文 在perl中,很多地方会切换上下文.所谓上下文,它的重点在于同一个表达式出现在不同地方,得到的结果不同.换句话说,同一个表达式,它表达的值不是固定的.这就像是同一个单词,在不同语境 ...

  3. Java编译与反编译

    Javac是一种编译器,它的作用是将符合Java语言规范的源代码转化成符合Java虚拟机规范的Java字节码. 一.编译过程 词法分析:找出源代码中的所有关键字,生成Token流 语法分析:检查Tok ...

  4. HBuilder + PHP开发环境配置

      HBuilder 集成开发环境简介 HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilde ...

  5. [转]windows 10 搭建angular开发环境

    本文转自:https://www.cnblogs.com/lilunpai/articles/7992538.html 一.环境介绍 1.开发环境:Windows10 2.开发ide工具:VS cod ...

  6. PHP开发中bcscale timezone charset的设定

    关于php的开发,有几个细节设定,需要知悉下:在项目的init.php 或 index.php 或 api.php 1. bcscale(18); 表示bc函数,默认小数点位数. 没有设定的话,默认为 ...

  7. 【转载】阿里云ECS Linux服务器禁止某些IP访问

    在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...

  8. 怎么使用小程序的data-*属性?

    参考文档:小程序事件 怎么使用小程序的data-*属性?[data-type,data-num,……] dataset 在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE. 书写方式: ...

  9. Prism 学习:从本地目录加载 Module

    在 Prism 中,将外部模块加载到主程序有以下几种方式:Code.XAML.配置文件.指定模块目录:其中,如果要使用 Code 方式来加载 Module,则需要将该 Module 引用到当前项目中: ...

  10. [PHP]代码执行和生命周期

    PHP代码的执行:1.和大部分程序一样,接收数据,处理数据,输出结果2.编写的代码就是输入的数据,php内核进行处理,返回相应的输出3.php作为业务程序和编译语言的区别就是,php多了一步把用户代码 ...