4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析

时间:2021-01-19 22:39:46

目录

前言

学习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)显示效果

4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析

(三)面向对象式的绘图

1.基本概念

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

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

下图是matplotlib基本的组成部分

4.7Python数据处理篇之Matplotlib系列(七)---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画布上

层级结构图:

4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析

(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. hdu2066一个人的旅行(多源点多汇点的最短路径问题)

    /* 思路:多源点,多会点的最短路径! 将最小号-1的节点但最源点,将最大号+1的点当作汇点! 将问题转变成从一个源点到一个汇点的最短路径的问题! 开始忘记初始化vector了,哇了好多次....坑爹 ...

  2. variable 'xxx' unsafe in 'case'的处理

    问题描述: case get(?Player_LoopTaskInfo) of {TargetCnt, TaskStar, TaskExp} -> ok; _ -> throw(&quot ...

  3. HTML5 microdata

    schema.org 测试地址 http://www.google.com/webmasters/tools/richsnippets

  4. 创建ASPState数据库

    原文:创建ASPState数据库 在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到生成ASPState的sql:InstallSqlState.sql ...

  5. Docker 案例: 在容器中部署静态网站

    ----------------知识点------------ 容器的端口映射: docker  run  [-P] [-p] -P,–publish-all=true | false,大写的P表示为 ...

  6. idea配置.gitignore后无法起作用

    1)要先进入项目包所在的文件夹 2)git rm -r --cached . ://后面有个点3)git add . ;后面有个点4)git commit -m  "update .giti ...

  7. 我们的爬虫从pyspider开始说起(一)

    看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”.所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步. 先来说这几天遇到 ...

  8. How can I get the baseurl of site?

    string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority +Request.ApplicationPa ...

  9. UI设计教程分享:6个不能错过的UI设计网站

    Ui设计学习的人越来越多了,想要找到合适的学习资料很难,很多才接触ui设计且没有基础的同学也不知道去哪里找学习资料,虽然现在百度上很容易搜到ui设计的学习资料,但是一看不难发现,很多都是过时的学习资料 ...

  10. .NetCore Session.Redis (转载)

    首先创建ASP.NET CORE Web项目,然后按如下顺序操作. 1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.D ...