Lightly Logo
返回按钮
返回博客

【Python 教程】Matplotlib 数据类型汇总

2023-02-06

Matplotlib 是一个用于数据可视化的 Python 模块。Matplotlib 和 Pandas 可作为互补工具,因为前者内建了大量的图表库,进一步提高了数据的可视性。

这篇教程虽然没有办法完全介绍 Matplotlib 的每一个细节,但我们还是可以尝试覆盖 Matplotlib 的各种基础功能,包括几个比较有趣的进阶项目。

阅读这篇教程需要具有一定的 Python 和 Pandas 基础,如果之前对 Python 完全没有任何了解,欢迎查看我们之前的相关教程: 【Python 核心库】Numpy 实景教程与练习 【Python 教程】使用 Pandas 整理数据

基础线形图

创建最简单的线形图只需要一行代码,随后通过 plt.show() 展示图表即可:

基础散点图

绘制散点图前,我们先来看看 plt.plot() 的参数内容:(x, y, 格式)。这个格式其实是颜色、标记、线条的缩写。举个例子: 'go-' 为绿色(green)、圆点、无线条,那样输出的图形便是散点图。 'r*--' 为红色(red)、星形、虚线 'ks.' 为黑色(black)、方形(square)、点线 'bD-.' 为蓝色(blue)、菱形(diamond)、点划线 这些例子无需硬背,有需要的时候输入并运行 help(plt.plot) 即可。

复合图形

功能强大的 Matplotlib 自然不会满足于单个图形,接下来这段将分为两个部分:在同一图表中绘制多个数据以及在同一窗口中绘制多个不同的图表。

在同一图表中绘制多个数据

这个其实很简单,只需要重复编写 plt.plot() 就可以了。加上标题、标签名称和图例即可输出以下效果:

绘制多个不同的图表

我们在 Matplotlib 中绘制图表时,其实是在一个类似画布的 figure 中加入各种各样的元素,而这里面的子图被称之为 axes(与 XY axis 轴并不相同)。一般而言,一个图表至少拥有一个子图。当我们有多个子图时,这些图表就会通过行列排序。

如果我们要在同一个画布中绘制多个子图,应使用的函数为 plt.subplots(1, 2)。其中,数字 1、2 分别表示子图代号,原本的 plt.plot() 需要分别改成 ax1.plot() 和 ax2.plot()。

在 plt.subplots() 设置 sharey=True 能让两个子图在 Y 轴上平行,而 dpi 则可以调整图标的清晰度。

进阶图形

Matplotlib 的图库远比点线图丰富,即使是更多的图表、曲线图都不在话下,我们甚至还可以调整各种参数修改图表大小和背景颜色等。由于篇幅限制,这里只放出几个进阶图形的参考图,有需要的小伙伴可以通过代码传送门在线查看Python代码,也可以参考 Matplotlib 的官方文档

绘制多个图表

这一组图表使用了 numpy 模块的 randint 随机数和 for 循环实现:

打开 fourPlots.py 项目查看代码:https://55911a1851-share.lightly.teamcode.com

绘制曲线图(正余弦波)

打开 sincosWave.py 项目查看代码:https://55911a1851-share.lightly.teamcode.com

调整背景颜色

Matplotlib 自带的样式代码:

打开 plotBackground.py 项目查看代码:https://55911a1851-share.lightly.teamcode.com

添加注释

plt.text 和 plt.annotate 可以分别为图表添加文本和注释。如果你想要添加多个注释,还可以通过 for 多次循环 plt.text() 函数。

打开 plotAnnotate.py 项目查看代码。

调整子图大小

我们可通过 Matplotlib 自带的两个函数绘制多子图的布局,即 plt.subplot2grid 和 plt.GridSpec。

我们甚至还可以在主图上添加子图:

打开 subplotSize.py 及 plotinPlot.py 项目查看代码。

泡沫图、柱状图、箱型图和时间序列

我们可以通过 plt.scatter() 函数动态改变某个点的颜色和大小,形成泡沫图的效果,甚至还可以关联 pandas 数据。

此外,我们还可以通过 plt.step()、plt.hist()、plt.boxplot()、plt.bar() 绘制不同的图表效果:

打开 bubblePlot.py 及 assortedPlot.py 项目查看代码:https://55911a1851-share.lightly.teamcode.com 本篇介绍的图形应用场景各有不同,大家可以根据自己的需求进行尝试。