4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析
目录
前言
学习matplotlib有一段时间了,总感觉学不到本质的东西,抓不到主要的重点,还是感觉有些吃力,画的图千变万化,总不能一一学会吧,今天我们就来总结一下,matplotlib本质的东西,让我们更能在全局上掌握matplotlib库。
(一)总框架分析
在matplotlib库里,总分成两种绘图方法
- 方法一:函数式绘图
- 方法二:面向对象式绘图
(二)函数式的绘图
1.说明:
在matplotlib.pyplot里是封装好的函数,用户可以直接调用函数进行绘图。
一般的,我们约定 matplotlib.pyplot 取别名为 plt
其模块下主要定义如下两方面的函数:
- 操作类的函数:对于画布,图,子图,坐标轴,图例,背景,网格等的操作。
如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()……
- 绘图类的函数:画折线图,散点图,条形图,直方图,饼状图等特点图的绘制函数。
如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……
具体可以参考官方网站
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() |
绘制x和y之间的一致性图 |
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
- 整个图形即是一个Figure对象,即一个弹出的绘图的窗口,便是一个figure。
- Figure对象至少包含一个子图,也就是Axes对象。
- Figure对象包含一些特殊的Artist对象,如title标题、图例legend。
- Figure对象包含画布canvas对象。 canvas对象一般不可见,通常无需直接操作该对象,matplotlib程序实际绘图时需要调用该对象。
(2)Axes
- 字面上理解,axes是数据轴axis的复数,但它并不是指数据轴,而是子图对象。可以这样理解,每一个子图都有x和y轴,axes则用于代表这两个数据轴所对应的一个子图对象。
- 常用方法set_xlim()以及set_ylim():
- 设置子图x轴和y轴对应的数据范围。
- set_title():设置子图的标题。
- set_xlabel()以及set_ylable():
- 设置子图x轴和y轴指标的描述说明。
(3)Axis
- Axis是数据轴对象,主要用于控制数据轴上刻度位置和显示数值。
- Axis有Locator和Formatter两个子对象,分别用于控制刻度位置和显示数值。
(4)Artist
- 基本上所有的对象都是一个Artist对象,包括Figure对象、Axes对象和Axis对象,可以将Artist理解为一个基本类。
- 当提交代码,图像最终呈现时,所有的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原理分析的更多相关文章
- 3.7Python数据处理篇之Numpy系列(七)---Numpy的统计函数
目录 目录 前言 (一)函数一览表 (二)统计函数1 (三)统计函数2 目录 前言 具体我们来学Numpy的统计函数 (一)函数一览表 调用方式:np.* .sum(a) 对数组a求和 .mean(a ...
- java基础解析系列(七)---ThreadLocal原理分析
java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- java并发系列(七)-----ConcurrentHashMap原理分析(JDK1.8)
JDK1.8的实现已经摒弃了Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashM ...
- 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数
目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...
- 5.6Python数据处理篇之Sympy系列(六)---矩阵的操作
目录 目录 前言 (一)矩阵的创建-Matrix() 1.说明: 2.源代码: 3.输出: (二)常用的构造矩阵 1.说明: 2.源代码: 3.输出: (三)基本操作 1.说明: 2.源代码: 3.输 ...
- 5.5Python数据处理篇之Sympy系列(五)---解方程
目录 目录 前言 (一)求解多元一次方程-solve() 1.说明: 2.源代码: 3.输出: (二)解线性方程组-linsolve() 1.说明: 2.源代码: 3.输出: (三)解非线性方程组-n ...
- 5.4Python数据处理篇之Sympy系列(四)---微积分
目录 目录 前言 (一)求导数-diff() 1.一阶求导-diff() 2.多阶求导-diff() 3.求偏导数-diff() (二)求积分-integrate() (三)求极限-limit() ( ...
- 5.3Python数据处理篇之Sympy系列(三)---简化操作
目录 5.3简化操作 目录 前言 (一)有理数与多项式的简化 1.最简化-simplify() 2.展开-expand() 3.提公因式-factor() 4.合并同类项-ceiling() 5.简化 ...
- 5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作
目录 目录 前言 (一)符号的初始化与输出设置-symbol() symbols() latex() 1.作用: 2.操作: (二)替换符号-subs(old,new) 1.说明: 2.源代码: 3. ...
随机推荐
- Jmeter连接Redis,获取Redis数据集
Redis(REmote DIctionary Server)是一个开源的内存数据结构存储,用作数据库,缓存和消息代理. 本博文是分享jmeter怎么连接使用Redis数据库. 安装Redis数据集J ...
- 如何快速使用Access实现一个登录验证界面?
大三上学期期末总结,嗯,没错,上学期,写在新学期开始,hhhh. 上学期末的时候信管班的一个同学问我会不会Access,能不能它实现一个登录验证界面,说实话,之前对Access只是有所耳闻,随便敷衍了 ...
- linux学习基础1
简介 包含计算机组成,发行.核心思想.主要目录,一些命令ifconfig.echo.tty.startx.export.pwd.history.shutdown.poweroff.reboot.hwc ...
- spark高可用集群搭建及运行测试
文中的所有操作都是在之前的文章spark集群的搭建基础上建立的,重复操作已经简写: 之前的配置中使用了master01.slave01.slave02.slave03: 本篇文章还要添加master0 ...
- 南大算法设计与分析课程复习笔记(4)L4 - QuickSort
一.快速排序 算法导论上关于快速排序有两种写法 第一种,从头到尾遍历,不断将小于基准元素的项移到前面.代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一 我们看算法导论上的一个例子: ...
- NSOperation讲解
本篇博客转自https://www.jianshu.com/p/4b1d77054b35 1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperat ...
- 【转载】Windows Server2012安装IIS服务器
在云服务器的使用过程中,很多人由于习惯或者实际需要,会选择Windows Server系统服务器,较常用的版本有Windows Server2008.Windows Server2012.在Windo ...
- C#基础知识总结(一)
这个基础知识系列是我自己对基础知识的一个巩固和总结,在复习的过程中对细节知识点加深印象,可能其中有错误之处,请大家批评指正,谢谢.希望和大家共同学习共同进步. 摘要 这个系列一篇总结了:C#程序的结构 ...
- 【Java每日一题】20170323
20170322问题解析请点击今日问题下方的“[Java每日一题]20170323”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- 《锋利的jQuery》笔记:插件的使用和写法
jQuery插件的种类 1.封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件.此类插件可以发挥出jQuery选择器的强大优势,有相当一部分 ...