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. ...
随机推荐
- 定时备份 MySQL 并上传到七牛
多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...
- 线性表&顺序线性表
第二章 线性表 参考文献:[数据结构(C语言版)].严蔚敏 本篇章仅为个人学习数据结构的笔记,不做任何用途. 2.1 线性结构的特点 (1). 存在唯一的一个被称为"第一个"的数据 ...
- C# XML入门
什么是XML? XML:可扩展标记语言. XML的作用: 纯文本,兼容性强. 和HTML的区别: xml: 主要用来处理.存储数据.无规定标签,可扩展. html:对数据的显示和描述. 语法标签固定. ...
- Webapi创建和使用 以及填坑(三)
WebApi使用填坑 前面工作跟别人做数据对接,因为我们是对接方所以东西都得按照他们的要求进行修改,于是给自己挖了很多坑,其实更多的都是自己能力还不够,在这里也做一个笔记了. 请求类型:applica ...
- webpack4 系列教程(十四):Clean Plugin and Watch Mode
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十四):Clean Plugin and Watch Mode>原文地址.更欢迎 ...
- 2018最新iOS端界面UI设计规范整理
在iPhone 6还没出的时候,都是用640×1136 px来做设计稿的,自从6的发布,所有的设计稿尺寸以750×1334 px来做设计稿尺寸 以750x1334px作为设计稿标准尺寸的原由: 从中间 ...
- Node.js性能分析神器Easy-Monitor
摘要: 使用Easy-Monitor,可以准确定位Node.js应用的性能瓶颈,帮助我们优化代码性能. 当应用出现性能问题时,最大的问题在于:如何准确定位造成性能瓶颈的代码呢?对于Node.js开发者 ...
- 初识 Java-监听器
使用Listener类当java web应用程序在web容器中运行时,在java web应用程序内部会不断发生各种事件,例如web应用的启动,暂停,销毁等.以及web应用中session开始和结束 ...
- C#导入Excel、Excel导入、导入.xls 、导入.xlsx、Excel2003版本、Excel2007版本
C#导入Excel: 1.选择Excel 03版文件 2.选择需要读取数据的Excel工作表 3.选择工作表中需要读取的列 源码地址在图片下面,不要点击图片,点击下载地址跳转下载.
- codevs3002 石子归并 3
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...