一.什么是Matplotlib

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
        Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以很快的熟悉它。Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI 工具包(比如 PyQt,WxPython、Tkinter)在应用程序中嵌入图形。与此同时,它也支持以脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用。

Matplotlib 主要特点是将数据可视化:

数据可视化:数据可视化是一个新兴名词,它表示用图表的形式对数据进行展示。当您对一个数据集进行分析时,如果使用数据可视化的方式,那么您会很容易地确定数据集的分类模式、缺失数据、离群值等等。下图展示了五个常用的数据可视化图表:

Matplotlib架构组成:

Matplotlib 由三个不同的层次结构组成,分别是脚本层、美工层和后端层。

1) 脚本层

脚本层是 Matplotlib 结构中的最顶层。我们编写的绘图代码大部分代码都在该层运行,它的主要工作是负责生成图形与坐标系。

2) 美工层

美工层是结构中的第二层,它提供了绘制图形的元素时的给各种功能,例如,绘制标题、轴标签、坐标刻度等。

3) 后端层

后端层是 Matplotlib 最底层,它定义了三个基本类,首先是 FigureCanvas(图层画布类),它提供了绘图所需的画布,其次是 Renderer(绘图操作类),它提供了在画布上进行绘图的各种方法,最后是 Event(事件处理类),它提供了用来处理鼠标和键盘事件的方法。

Matplotlib图形组成

Matplotlib 生成的图形主要由以下几个部分构成:

  • Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
  • Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
  • Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;
  • Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

Matplotlib功能扩展包

许多第三方工具包都对 Matplotlib 进行了功能扩展,其中有些安装包需要单独安装,也有一些允许与 Matplotlib 一起安装。常见的工具包如下:

  • Bashmap:这是一个地图绘制工具包,其中包含多个地图投影,海岸线和国界线;
  • Cartopy:这是一个映射库,包含面向对象的映射投影定义,以及任意点、线、面的图像转换能力;
  • Excel tools: 这是 Matplotlib 为了实现与 Microsoft Excel 交换数据而提供的工具;
  • Mplot3d:它用于 3D 绘图;
  • Natgrid:这是 Natgrid 库的接口,用于对间隔数据进行不规则的网格化处理。

Matplotlib 中的 pyplot 模块是一个类似命令风格的函数集合,这使得 Matplotlib 的工作模式和 MATLAB 相似。

pyplot 模块提供了可以用来绘图的各种函数,比如创建一个画布,在画布中创建一个绘图区域,或是在绘图区域添加一些线、标签等。以下表格对这些函数做了简单地介绍。

绘图类型

绘图类型
函数名称 描述
Bar 绘制条形图
Barh 绘制水平条形图
Boxplot 绘制箱型图
Hist 绘制直方图
his2d 绘制2D直方图
Pie 绘制饼状图
Plot 在坐标轴上画线或者标记
Polar 绘制极坐标图
Scatter 绘制x与y的散点图
Stackplot 绘制堆叠图
Stem 用来绘制二维离散数据绘制(又称为“火柴图”)
Step 绘制阶梯图
Quiver 绘制一个二维按箭头

Image函数

图像函数
函数名称 描述
Imread 从文件中读取图像的数据并形成数组。
Imsave 将数组另存为图像文件。
Imshow 在数轴区域内显示图像。

Axis函数

Axis函数
函数名称 描述
Axes 在画布(Figure)中添加轴
Text 向轴添加文本
Title 设置当前轴的标题
Xlabel 设置x轴标签
Xlim 获取或者设置x轴区间大小
Xscale 设置x轴缩放比例
Xticks 获取或设置x轴刻标和相应标签
Ylabel 设置y轴的标签
Ylim 获取或设置y轴的区间大小
Yscale 设置y轴的缩放比例
Yticks 获取或设置y轴的刻标和相应标签

Figure函数

Figure函数
函数名称 描述
Figtext 在画布上添加文本
Figure 创建一个新画布
Show 显示数字
Savefig 保存当前画布
Close 关闭画布窗口
import matplotlib.pyplot as pltdata = {'apples': 10, 'oranges': 15, 'lemons': 5, 'limes': 20}
names = list(data.keys())
values = list(data.values())fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True)
axs[0].bar(names, values)
axs[1].scatter(names, values)
axs[2].plot(names, values)
fig.suptitle('Categorical Plotting')
plt.show()

第一个绘图程序

首先导入 Matplotlib 包中的 Pyplot 模块,并以 as 别名的形式简化引入包的名称。

import matplotlib.pyplot as plt

接下来,使用 NumPy 提供的函数 arange() 创建一组数据来绘制图像。

#引入numpy包
import numpy as np
#获得0到2π之间的ndarray对象
x = np.arange(0, math.pi*2, 0.05)

上述所得 x 的值作用到 x 轴上,而该值对应的正弦值,也就是 y 值,使用以下方法获取:

y = np.sin(x)

使用 plot() 函数对 x、y 进行绘制。

plt.plot(x,y)

主要的绘图工作已经完成,不过还需要绘制一些细节,需要我们补充一下,比如图像的标题(title)、x 轴与 y 轴的标签(label)等。

plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')

完整的程序代码如下:

from matplotlib import pyplot as plt
import numpy as np
import math
#调用math.pi方法弧度转为角度
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
#使用show展示图像
plt.show()

代码执行后,显示结果如下:

图1:sine正弦函数图像

第二个绘图程序

柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。柱状图显示了不同类别之间的比较关系,图表的水平轴 X 指定被比较的类别,垂直轴 Y 则表示具体的类别值。

Matplotlib 提供了bar()函数来绘制柱状图,它可以应用在 MATLAB 样式以及面向对象的绘图方法中。当它与 axes 对象一起使用时,其语法格式如下:

ax.bar(x, height, width, bottom, align)

该函数的参数说明,如下表所示:

bar()函数参数说明
x 一个标量序列,代表柱状图的x坐标,默认x取值是每个柱状图所在的中点位置,或者也可以是柱状图左侧边缘位置。
height 一个标量或者是标量序列,代表柱状图的高度。
width 可选参数,标量或类数组,柱状图的默认宽度值为 0.8。
bottom 可选参数,标量或类数组,柱状图的y坐标默认为None。
algin 有两个可选项 {"center","edge"},默认为 'center',该参数决定 x 值位于柱状图的位置。

该函数的返回值是一个 Matplotlib 容器对象,该对象包含了所有柱状图。

下面是一个关于 Matplotlib 柱状图的简单示例。它用来显示了不同编程语言的学习人数。

import matplotlib.pyplot as plt
#创建图形对象
fig = plt.figure()
#添加子图区域,参数值表示[left, bottom, width, height ]
ax = fig.add_axes([0,0,1,1])
#准备数据
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
#绘制柱状图
ax.bar(langs,students)
plt.show()

输出结果如下:

图2:matplotlib bar()绘图

通过调整柱状图的宽度,可以实现在同一 x 轴位置绘制多个柱状图。您可以将它们设置成不同的颜色,从而使它们更容易区分。下面示例描述了某工程学院过去四年中,三个专业录取的统招学生数量。

import numpy as np
import matplotlib.pyplot as plt
#准备数据
data =
[[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
#添加子图区域
ax = fig.add_axes([0,0,1,1])
#绘制柱状图
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)

上述代码执行后,将显示四个柱状图,将每个柱状图又均分为三个小柱状图,每个柱状图占据 0.25 个单位。

图3:matplotlib绘图

柱状图除了上述使用方法外,还有另外一种堆叠柱状图。所谓堆叠柱状图就是将不同数组别的柱状图堆叠在一起,堆叠后的柱状图高度显示了两者相加的结果值。

bar() 函数提供了一个可选参数bottom,该参数可以指定柱状图开始堆叠的起始值,一般从底部柱状图的最大值开始,依次类推。

下面是一个不同国家参加奥林匹克运动会所得奖牌(金银铜)的柱状堆叠图示例,如下所示:

import numpy as np
import matplotlib.pyplot as pltcountries = ['USA', 'India', 'China', 'Russia', 'Germany']
bronzes = np.array([38, 17, 26, 19, 15])
silvers = np.array([37, 23, 18, 18, 10])
golds = np.array([46, 27, 26, 19, 17])
# 此处的 _ 下划线表示将循环取到的值放弃,只得到[0,1,2,3,4]
ind = [x for x, _ in enumerate(countries)]
#绘制堆叠图
plt.bar(ind, golds, width=0.5, label='golds', color='gold', bottom=silvers+bronzes)
plt.bar(ind, silvers, width=0.5, label='silvers', color='silver', bottom=bronzes)
plt.bar(ind, bronzes, width=0.5, label='bronzes', color='#CD853F')
#设置坐标轴
plt.xticks(ind, countries)
plt.ylabel("Medals")
plt.xlabel("Countries")
plt.legend(loc="upper right")
plt.title("2019 Olympics Top Scorers")
plt.show()

在上述代码中,第一次调用plt.bar()绘制了黄色柱状图, 第二次调用plot.bar()时绘制了灰色柱状图,最后一次调用plt.bar()则绘制最底部的柱状图。两个柱状图相接触的位置就是顶部与底部的位置,这样就构成了柱状堆叠图。

图4:柱状堆叠图

Python 初学者之Matplotlib库(一)相关推荐

  1. Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改、横坐标文字进行横/纵向显示、控制坐标轴范围等)之详细攻略

    Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改.横坐标文字进行横/纵向显示.控制坐标轴范围等)之详细攻略 目录 1.Matplotlib库图表绘制包 ...

  2. Py之matplotlib:python包之matplotlib库图表绘制包的简介、安装、使用方法(matplotlib颜色大全)详细攻略

    Py之matplotlib:python包之matplotlib库图表绘制包的简介.安装.使用方法(matplotlib颜色大全)详细攻略 目录 matplotlib简介 matplotlib安装 m ...

  3. Python系列 之 matplotlib库 基础知识

    Python系列 之 matplotlib库 基础知识学习 Pyplot 简单示例 中文显示问题 注册全局字体 font_manager.FontProperties注册字体 Figure Figur ...

  4. 二、Python数据挖掘(Matplotlib库)

    二.Python数据挖掘(Matplotlib库) 目录: 二.Python数据挖掘(Matplotlib库) 一.Matplotlib 简介 二.Matplotlib 理论基础 1.Matplotl ...

  5. python中使用matplotlib库绘制多个子图(subplot函数用法)

    matplotlib库由各种可视化类组成,其内部结构复杂.为便于用户使用,该库提供了matplotlib.pyplot子库用于绘制各类可视化图形,pyplot子库相当于一个快捷方式,通过它可以快速调用 ...

  6. Python学习之matplotlib库-显示中文

    目录 一. 直接修改配置文件matplotlibrc 二.在运行的程序中添加代码 (一)matplotlib 动态修改配置 (二)matplotlib 设置自定义字体 matplotlib在绘图时,会 ...

  7. Python:利用matplotlib库画各种统计图

    # -*- coding: utf-8 -*- #matplotlib小测试 ''' import matplotlib.pyplot as plt #导入库plt.plot([2,4,6,8,10] ...

  8. python数据分析之matplotlib库(下)

    matplotlib基础 经过前面的学习,我们学会了绘制折线图以及一些相关的操作, 今天我们继续学习 由于前面我们学习了基础的语法及操作 折线图,散点图,条形图的方法都大同小异,这里我们直接上代码. ...

  9. python画图三维-Python三维绘图之Matplotlib库的使用方法

    前言 在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的三维绘图工具. 1.创建三维坐标轴对象Axes3D 创建Axes3D主要有两种方式, ...

最新文章

  1. 简述原型链是什么,有什么用处?
  2. win10下vs2015编译的程序如何运行在win7等系统(无需安装Redistributable)
  3. python3源码剖析_T-SNE源码剖析(python版)
  4. Verifying Checksum ... Bad Data CRC ERROR: can#39;t get kernel image!
  5. 【JavaScript】如何将JS中的数据提交到Servlet服务器中
  6. Mac VSCode配置C语言环境(可以调试)
  7. dex分包之--------multidex包的配置使用
  8. 【算法】BloomFilter 如何判断一个元素在亿级数据中是否存在?
  9. python中figure函数_Python figure参数及subplot子图绘制代码
  10. 阿里首席架构师分享的Java工程师职业规划
  11. web3.eth.estimateGas
  12. 打算开源一个低代码平台,第四天,包含【工作流,业务流,财务,APQC】。技术栈 React,typescript,java,mysql
  13. apm系统服务器,APM系统简单对比(zipkin,pinpoint和skywalking)
  14. python爬取双色球历史数据_爬取双色球历史数据
  15. 保护Android网络数据教程
  16. 管中窥豹,看看可能是谁在卖港股.
  17. eggjs框架学习心得
  18. C#双色球——简单抽取中奖号码
  19. Python 操作配置文件
  20. 全年营收预增40%,奈雪的茶背后的喜与忧

热门文章

  1. 深入理解Linux内核(一)——Linux操作系统基础概念
  2. 1.Python相关---钉钉报警及邮件发送
  3. 厦门大学考研真题笔记:703新闻学与传播学基础
  4. unity学习之VideoPlayer
  5. java和c语言进行TCP数据通信
  6. Web 3D 从入门到跑路
  7. uni-app web-view缩放
  8. 记录【BUG】解决方案Delete ␍eslint(prettier/prettier)
  9. 一些写英文简历的词汇吧
  10. 运筹系列26:对偶问题和对偶单纯形法