4.7Python数据处理篇之Matplotlib系列(七)

Wesley13
• 阅读 786

目录

[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()

绘制_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)显示效果

4.7Python数据处理篇之Matplotlib系列(七)

(三)面向对象式的绘图

1.基本概念

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

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

下图是matplotlib基本的组成部分

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这