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

目录

[TOC]

前言

学习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%20pyplot#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)显示效果

03.png

(三)面向对象式的绘图

1.基本概念

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

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

下图是matplotlib基本的组成部分

image

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画布上

层级结构图:

02.png

(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 周一

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356