天天看点

第92天:Python Matplotlib 进阶操作

by 潮汐

本章节主要是 Matplotlib 和 NumPy 实际操作案例讲解,matplotlib 通常与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,除此之外,它还可以和其他图形工具包搭配使用。前提是在现在的环境中已经安装了 Numpy 模块,Numpy 安装详情请参考第 79 天:数据分析之 Numpy 初步

这一节将从简到繁用实例讲解 matplotlib 和 Numpy 结合使用的知识点。

使用 Numpy的函数 <code>np.arange()</code> 函数创建 x 轴上的值。将 y 轴上的对应值存储在另一个数组对象 y 中。 这些值使用 matplotlib 软件包的 pyplot 子模块的 plot() 函数绘制。

实例如下:

以上程序运行结果图:

注意:作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值,可以使用以下格式化字符,表格如下:

字符

描述

'-'

实线样式

'--'

短横线样式

'-.'

点划线样式

':'

虚线样式

'.'

点标记

','

像素标记

'o'

圆标记

'v'

倒三角标记

'^'

正三角标记

'&lt;'

左三角标记

'&gt;'

右三角标记

'1'

下箭头标记

'2'

上箭头标记

'3'

左箭头标记

'4'

右箭头标记

's'

正方形标记

'p'

五边形标记

'*'

星形标记

'h'

六边形标记 1

'H'

六边形标记 2

'+'

加号标记

'x'

X 标记

'D'

菱形标记

'd'

窄菱形标记

'|'

竖直线标记

'_'

水平线标记

图形显示颜色缩写简写表格如下:

颜色

'b'

蓝色

'g'

绿色

'r'

红色

'c'

青/绿色

'm'

品红色

'y'

黄色

'k'

黑色

'w'

白色

橙色

使用以上两个表格表示的简化符号画一个绿色散点图,散点使用 <code>'o'</code>表示,,具体实例如下:

以上程序运行结果为:

例如绘制一个倒三角图形:

显示结果如下:

正弦波形图的绘制需要用到 Numpy 的数学函数 sin() 和 cos(),详细的数学函数使用请参考 NumPy 系列文章:第 84 天:NumPy 数学函数

显示结果:

在一张图中显示出正弦函数和余弦函数,这里需要使用 subplot 来建立网格图,一幅图中使用两个网格,两个网格中分别展示正弦函数和余弦函数;subplot 函数使用说明如下:

matplotlib 中, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制, 调用形式如下 :

参数说明:

图表的整个绘图区域被分成 numRows 行和 numCols 列

然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1,左下子区域编号为3,右上子区域编号为2,右下子区域编号为 4,当然具体的还要看指定网格的行数和列数而定。

plotNum 参数指定创建的 Axes 对象所在的区域

网格编号图如下:

假如 numRows = 2, numCols = 3, 那整个绘制图表样式为 2X3 的图片区域, 用坐标表示为

再当 plotNum = 3 时, 表示的坐标为(1, 3), 即第一行第三列的子图

如果 numRows, numCols 和 plotNum 这三个数都小于 10 的话, 可以把它们缩写为一个整数, 例如 subplot(323) 和 subplot(3,2,3) 是相同的。

subplot 在 plotNum 指定的区域中创建一个轴对象, 如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

例1:上述网格编号图代码如下

例4:

还可以表示为:

结果显示:

网格图1:

网格图2:

所以正余弦函数波形图可以表示为:

最后图形展示:

直方图也称条形图,pyplot 子模块提供 bar() 函数来生成条形图,下面的实例是一个使用 <code>bar()</code> 函数生成的一个简单的柱状图.

程序运行结果为:

Matplotlib 结合 NumPy 使用:

这时候需要用到 NumPy 中的直方统计函图:histogram

<code>a</code> 是待统计数据的数组;

<code>bins</code>指定统计的区间个数;

<code>range</code>是一个长度为2的元组,表示统计范围的最小值和最大值,默认值 <code>None</code>,表示范围由数据的范围决定

<code>weights</code>为数组的每个元素指定了权值,<code>histogram()</code>会对区间中数组所对应的权值进行求和

<code>density</code>为 <code>True</code> 时,返回每个区间的概率密度;为 <code>False</code>,返回每个区间中元素的个数

函数说明:

<code>numpy.histogram()</code> 函数是数据的频率分布的图形表示。 水平尺寸相等的矩形对应于类间隔,称为 bin,变量 height 对应于频率。

<code>numpy.histogram()</code> 函数将输入数组和 bin 作为两个参数。 bin 数组中的连续元素用作每个 bin 的边界。

例如:

输出结果为:

<code>plt()</code>函数使用:

Matplotlib 可以将直方图的数字表示转换为图形。 pyplot 子模块的 plt() 函数将包含数据和 bin 数组的数组作为参数,并转换为直方图,例如:

例1:一个简单的曲线图

画出一个简单的曲线图,如下所示:

结果展示为:

例2:升级版的曲线图

本章节是 Matplotlib 结合 NumPy 使用的画图方法,主要介绍了折线图、正余弦波形图、方形图、曲线图的基本画法,同时也详细讲述了子图 <code>subplot</code>的基本使用方法,希望以上知识点能对学习这一模块的伙伴们提供更好支撑,若有任何问题欢迎在交流群中进行交流 😃

https://www.runoob.com/numpy/numpy-matplotlib.html

https://www.runoob.com/w3cnote/matplotlib-tutorial.html

https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

文中示例代码:python-100-days

关注公众号:python技术,回复"python"一起学习交流

第92天:Python Matplotlib 进阶操作

作者:纯洁的微笑

出处:www.ityouknow.com

资源:微信搜【纯洁的微笑】关注我,回复 【程序员】【面试】【架构师】有我准备的一线程序必备计算机书籍、大厂面试资料和免费电子书。 一共1024G的资料,希望可以帮助大家提升技术和能力。

本文如对您有帮助,还请多帮 【推荐】 下此文。

点我了解:Tooool-程序员一站式导航网站