目录
前言
学习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. ...
随机推荐
-
hdu2066一个人的旅行(多源点多汇点的最短路径问题)
/* 思路:多源点,多会点的最短路径! 将最小号-1的节点但最源点,将最大号+1的点当作汇点! 将问题转变成从一个源点到一个汇点的最短路径的问题! 开始忘记初始化vector了,哇了好多次....坑爹 ...
-
variable 'xxx' unsafe in 'case'的处理
问题描述: case get(?Player_LoopTaskInfo) of {TargetCnt, TaskStar, TaskExp} -> ok; _ -> throw(" ...
-
HTML5 microdata
schema.org 测试地址 http://www.google.com/webmasters/tools/richsnippets
-
创建ASPState数据库
原文:创建ASPState数据库 在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到生成ASPState的sql:InstallSqlState.sql ...
-
Docker 案例: 在容器中部署静态网站
----------------知识点------------ 容器的端口映射: docker run [-P] [-p] -P,–publish-all=true | false,大写的P表示为 ...
-
idea配置.gitignore后无法起作用
1)要先进入项目包所在的文件夹 2)git rm -r --cached . ://后面有个点3)git add . ;后面有个点4)git commit -m "update .giti ...
-
我们的爬虫从pyspider开始说起(一)
看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”.所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步. 先来说这几天遇到 ...
-
How can I get the baseurl of site?
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority +Request.ApplicationPa ...
-
UI设计教程分享:6个不能错过的UI设计网站
Ui设计学习的人越来越多了,想要找到合适的学习资料很难,很多才接触ui设计且没有基础的同学也不知道去哪里找学习资料,虽然现在百度上很容易搜到ui设计的学习资料,但是一看不难发现,很多都是过时的学习资料 ...
-
.NetCore Session.Redis (转载)
首先创建ASP.NET CORE Web项目,然后按如下顺序操作. 1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.D ...