Python 初学者之Matplotlib库(一)
一.什么是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函数
函数名称 | 描述 |
---|---|
Axes | 在画布(Figure)中添加轴 |
Text | 向轴添加文本 |
Title | 设置当前轴的标题 |
Xlabel | 设置x轴标签 |
Xlim | 获取或者设置x轴区间大小 |
Xscale | 设置x轴缩放比例 |
Xticks | 获取或设置x轴刻标和相应标签 |
Ylabel | 设置y轴的标签 |
Ylim | 获取或设置y轴的区间大小 |
Yscale | 设置y轴的缩放比例 |
Yticks | 获取或设置y轴的刻标和相应标签 |
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)
该函数的参数说明,如下表所示:
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库(一)相关推荐
- Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改、横坐标文字进行横/纵向显示、控制坐标轴范围等)之详细攻略
Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改.横坐标文字进行横/纵向显示.控制坐标轴范围等)之详细攻略 目录 1.Matplotlib库图表绘制包 ...
- Py之matplotlib:python包之matplotlib库图表绘制包的简介、安装、使用方法(matplotlib颜色大全)详细攻略
Py之matplotlib:python包之matplotlib库图表绘制包的简介.安装.使用方法(matplotlib颜色大全)详细攻略 目录 matplotlib简介 matplotlib安装 m ...
- Python系列 之 matplotlib库 基础知识
Python系列 之 matplotlib库 基础知识学习 Pyplot 简单示例 中文显示问题 注册全局字体 font_manager.FontProperties注册字体 Figure Figur ...
- 二、Python数据挖掘(Matplotlib库)
二.Python数据挖掘(Matplotlib库) 目录: 二.Python数据挖掘(Matplotlib库) 一.Matplotlib 简介 二.Matplotlib 理论基础 1.Matplotl ...
- python中使用matplotlib库绘制多个子图(subplot函数用法)
matplotlib库由各种可视化类组成,其内部结构复杂.为便于用户使用,该库提供了matplotlib.pyplot子库用于绘制各类可视化图形,pyplot子库相当于一个快捷方式,通过它可以快速调用 ...
- Python学习之matplotlib库-显示中文
目录 一. 直接修改配置文件matplotlibrc 二.在运行的程序中添加代码 (一)matplotlib 动态修改配置 (二)matplotlib 设置自定义字体 matplotlib在绘图时,会 ...
- Python:利用matplotlib库画各种统计图
# -*- coding: utf-8 -*- #matplotlib小测试 ''' import matplotlib.pyplot as plt #导入库plt.plot([2,4,6,8,10] ...
- python数据分析之matplotlib库(下)
matplotlib基础 经过前面的学习,我们学会了绘制折线图以及一些相关的操作, 今天我们继续学习 由于前面我们学习了基础的语法及操作 折线图,散点图,条形图的方法都大同小异,这里我们直接上代码. ...
- python画图三维-Python三维绘图之Matplotlib库的使用方法
前言 在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的三维绘图工具. 1.创建三维坐标轴对象Axes3D 创建Axes3D主要有两种方式, ...
最新文章
- 简述原型链是什么,有什么用处?
- win10下vs2015编译的程序如何运行在win7等系统(无需安装Redistributable)
- python3源码剖析_T-SNE源码剖析(python版)
- Verifying Checksum ... Bad Data CRC ERROR: can#39;t get kernel image!
- 【JavaScript】如何将JS中的数据提交到Servlet服务器中
- Mac VSCode配置C语言环境(可以调试)
- dex分包之--------multidex包的配置使用
- 【算法】BloomFilter 如何判断一个元素在亿级数据中是否存在?
- python中figure函数_Python figure参数及subplot子图绘制代码
- 阿里首席架构师分享的Java工程师职业规划
- web3.eth.estimateGas
- 打算开源一个低代码平台,第四天,包含【工作流,业务流,财务,APQC】。技术栈 React,typescript,java,mysql
- apm系统服务器,APM系统简单对比(zipkin,pinpoint和skywalking)
- python爬取双色球历史数据_爬取双色球历史数据
- 保护Android网络数据教程
- 管中窥豹,看看可能是谁在卖港股.
- eggjs框架学习心得
- C#双色球——简单抽取中奖号码
- Python 操作配置文件
- 全年营收预增40%,奈雪的茶背后的喜与忧