woxmh 2020-06-03
by 潮汐
今天我们一起来探究 Python 中一个很有趣的模块--Matplotlib,Matplotlib 是一个非常优秀的 Python 2D 绘图库,只要给出符合格式的数据,通过 Matplotlib 就可以方便地制作数据图。
IPython 是 Python 的一个增强版本。它在下列方面有所增强:命名输入输出、使用系统命令(shell commands)、排错(debug)能力。我们在命令行终端给 IPython 加上参数 -pylab (0.12 以后的版本是 --pylab)之后,就可以像 Matlab 或者 Mathematica 那样以交互的方式绘图。
pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。
安装 Matplotlib 包与安装其他 Python 包一样,都可以使用 pip 来安装。
启动命令行窗口,在命令行窗口中输入如下命令:
pip3 install matplotlib
输入上面的命令后会自动下载安装 Matplotlib 包的最新版本。下载完成后会安装,最后提示 Matplotlib 包安装成功:
Installing collected packages: matplotlib Successfully installed matplotlib-3.1.1
在有网络限制条件下我们需要下载离线包来安装,python matplotlib 离线安装需要提前下载好与 python 版本对应的 wheel 安装包,下载地址
在上图中选择相应的安装包下载即可,cp36
表示 python 是 3.6 版本,同样的 cp37
表示 python 是3.7 版本,同样可以在 python 命令行下使用一下命令查看支持的版本属性:
>>>python >>> import pip._internal >>> print(pip._internal.pep425tags.get_supported())
以上结果可以显示出相应的版本支持,下载好后 使用 pip命令安装即可成功:
pip install matplotlib-3.1.1-cp36-cp36m-manylinux1_x86_64.whl
matplotlib 框架分为三层,这三层构成了一个栈,上层可以调用下层,三层框架描述如下:
这三层属于matplotlib程序包的范畴,脚本层(pytplot模块)可以提供给我们一个与matplotlib打交道的接口,我们可以只通过调用pyplot模块的函数从而操作整个程序包,来绘制图形。
matplotlib 编程接口由 3 层组成,组成描述如下:
编程接口图:
在matplotlib库里,总分成两种绘图方式
绘图方法通过调用一系列函数传入数据绘制出相应的图,
在 matplotlib.pyplot 里是封装好的函数,用户可以直接调用函数进行绘图。
一般的,我们约定 matplotlib.pyplot 取别名为 plt
其模块下主要定义如下两方面的函数:
操作类的函数:对于画布,图,子图,坐标轴,图例,背景,网格等的操作。
如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()等
绘图类的函数:画折线图,散点图,条形图,直方图,饼状图等特点图的绘制函数。
如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……
绘图部分函数如下:
序号 | 绘图函数(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() | 绘制非结构化三角形网格作为线条图 |
面向对象式的绘图,才是matplotlib绘图最自然的方式
下图是 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 | 格子 |
基本对象描述如下:
指整个图形(包括所有的元素,比如标题、线等)。 管理着所有的坐标系,还有一些特殊的艺术家和canvas(画布)。
数据的绘图区域
坐标系中的一条轴,包含大小限制、刻度和刻度标签。
图中所有的对象都是artis,当图形显示时,所有的艺术家都会被绘制到画布上。
值得注意的是:
绘图之间的层级结构如下:
在现实生活中,如果我们要画一幅画,首先需要什么工具呢?
而使用 Matplotlib 画图同样如此,首先需要指定一个画板,再指定一张画布,然后再指定元素开始作画。
例如:
import matplotlib.pyplot as plt # 指定一个画板 fig = plt.figure() # 指定画板后指定轴 # ax = fig.add_subplot(111) ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(222) ax3 = fig.add_subplot(224) ax4 = fig.add_subplot(223) # 设置轴的位置 # ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title=‘An Example Axes‘, # ylabel=‘Y-Axis‘, xlabel=‘X-Axis‘) plt.show()
运行结果如下:
matplotlib.pytplot包含了一系列类似于matlab的画图函数。 它的函数作用于当前图形(figure)的当前坐标系(axes)。
import matplotlib.pyplot as plt
导入模块后,调用相应函数,例如
plot(xdata,ydata,format)
函数参数:
例如:
import matplotlib.pyplot as plt plt.plot([1,2],[1,2],‘r--+‘) plt.show()
运行结果为:
再例如一个简单的折线图如下:
import matplotlib.pyplot as plt x = (1,3,5,9,13) y = (2,5,9,12,28) # 调用绘制方法 # 设置线条属性 # linewidth属性设置线条的宽度 plt.plot(x,y,linewidth = 5) # 显示图片 plt.show()
运行结果:
除了设置这些属性以外,图形还可以设置其他属性,这些概念我们将在下一节文章中作详细的讲解。
凡事预则立,学习任何一门知识也得从最基本开始,本章节对 matplotlib 模块做了详细的概念描述,在接下来的的章节中将结合 NumPy 模块进行实战性演练,以此对初入门的伙伴们做更好的支撑。
https://blog.csdn.net/hekind/article/details/79542040
https://matplotlib.org/3.1.1/contents.html
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html?highlight=matplotlib pyplot#module-matplotlib.pyplot
文中示例代码:python-100-days
关注公众号:python技术,回复"python"一起学习交流