在 Matplotlib 中,最基本的就是绘制一个折线图。这一节我们先来简单介绍一下如何绘制一个折线图,后面再去学习如何绘制其他图表。
Matplotlib 折线图函数
在 Matplotlib 中,我们可以使用 plot() 函数来绘制一个折线图。折线图的主要作用是:观察 “因变量 y” 随着 “自变量 x” 改变的趋势。所以折线图特别适用于展示随时间变化的连续数据。
语法:
plt.plot(x, y)说明:
x 和 y 这 2 个都是必选参数,它们可以是列表、数组、系列(Series)以及其他可迭代对象(比如 range 对象)。其中,数组是 NumPy 的数据类型,Series 是 Pandas 的数据类型。
示例 1:绘制一条折线
# 导入库
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
如果想要使用 Matplotlib 来绘制一个图表,我们至少要经历 3 步:① 导入库;② 绘图;③ 显示。
# 第1步:导入库
import matplotlib.pyplot as plt首先,我们使用上面这句代码来引入 Matplotlib 库中的 pyplot 子库,并将其命名为 plt。因为 Matplotlib 大部分的绘图功能是在 pyplot 子库中,所以通常只需要导入 pyplot 子库就可以了。
# 第2步:绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y)接下来,我们使用上面代码来绘制一个折线图。根据 x 和 y 这两个列表,我们拥有 4 个折点坐标:(1, 16)、(2, 15)、(3, 18)、(4, 17)。
# 第3步:显示
plt.show()仅仅只有第 1 步和第 2 步,运行代码之后并不会有任何效果。最后我们还要调用 plt 的 show() 函数,这样才能把图表显示出来。
Matplotlib 窗口除了展示图表之后,还提供了很多便捷的功能,如下图所示。这些功能包括保存成一张图片、对窗口进行配置等,小伙伴们可以自行摸索一下。

示例 2:绘制多条折线
import matplotlib.pyplot as plt
# 绘图
x1 = [1, 2, 3, 4]
y1 = [16, 15, 18, 17]
x2 = [1, 2, 3, 4]
y2 = [15, 19, 17, 16]
plt.plot(x1, y1)
plt.plot(x2, y2)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
在一个图表中,我们不仅可以绘制一条折线,还可以同时绘制多条折线。想要在一个图表中绘制多条折线也很简单,我们只需要调用多次 plot() 函数就可以了。
实际上,我们使用一个 plot() 函数也能绘制多条折线。对于这个例子来说,下面 2 种方式是等价的。
# 方式 1:使用多个plot()
plt.plot(x1, y1)
plt.plot(x2, y2)
# 方式 2:使用一个plot()
plt.plot(x1, y1, x2, y2)Matplotlib 折线图样式
为了让折线图更加的美观,plot() 函数还提供了很多用于定义样式的参数,这些参数主要分为 2 类:① 线条样式;② 节点样式。
1. 线条样式
在 Matplotlib 中,用于定义线条样式的参数有 3 个,如下表所示。
| 参数 | 说明 |
|---|---|
| color | 线条颜色 |
| linestyle | 线条外观 |
| linewidth | 线条宽度 |
参数 linestyle 用于定义线条的外观,它的取值有 2 种方式:一种是 “关键字”,另一种是 “字符”,如下表所示。
| 关键字 | |
| solid(默认值) | 实线 |
| dashed | 虚线 |
| dotted | 点线 |
| dashdot | 点划线 |
| 字符 | |
| -(默认值) | 实线 |
| -- | 虚线 |
| : | 点线 |
| -. | 点划线 |
参数 color 用于定义线条的颜色,它常用的取值有 2 种:① 关键字;② 十六进制 RGB 值。其中,关键字指的是颜色的英文名称,比如 red、green、blue 等。而十六进制 RGB 值指的是类似 “#FBF9D0” 这样的值。
如果使用关键字满足不了需求,我们就得借助十六进制 RGB 值了,相信经常使用 Photoshop 的小伙伴对这种值不会陌生。可能小伙伴就会问了,这种十六进制 RGB 值是怎么获取的呢?
我们可以使用一个名为 “Color Express” 的软件(如下图所示),来获取到十六进制 RGB 值。对于 Color Express 这个软件,小伙伴们可以自行搜一下。

参数 linewidth 用于定义线条的宽度,比如 linewidth=2 表示定义线条宽度为 2 像素。其中 linewidth 的默认值为 1,也就是 1 像素。
示例 3:线条外观
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, linestyle='dashed')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
对于这个例子来说,下面 2 种方式是等价的。另外对于参数 linestyle 其他取值的效果,小伙伴们可以自行试一下。
# 方式 1
plt.plot(x, y, linestyle='dashed')
# 方式 2
plt.plot(x, y, linestyle='--')示例 4:线条颜色
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, color='red')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
plt.plot(x, y, color='red') 这句代码表示定义线条颜色为 red(红色),当然我们也可以使用十六进制 RGB 值,小伙伴们可以自行试一下。
# 十六进制RGB值
plt.plot(x, y, color=' #10CBC8')示例 5:线条宽度
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, linewidth=3)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
在这个例子中,linewidth=3 表示定义线条的宽度为 3 像素。
2. 节点样式
在 Matplotlib 中,用于定义节点样式的参数有 4 个,如下表所示。
| 参数 | 说明 |
|---|---|
| marker | 节点外观 |
| markersize 或 ms | 节点大小 |
| markerfacecolor 或 mfc | 节点颜色 |
| markeredgecolor 或 mec | 边框颜色 |
参数 marker 用于定义节点的外观,它常用的取值如下表所示。
| 取值 | 说明 |
|---|---|
| . | 点 |
| , | 像素 |
| o | 实心圆 |
| v | 下三角 |
| ^ | 上三角 |
| < | 左三角 |
| > | 右三角 |
| 1 | 下花三角 |
| 2 | 上花三角 |
| 3 | 左花三角 |
| 4 | 右花三角 |
| s | 实心正方形 |
| p | 实心五角星 |
| * | 星形 |
| h | 竖六边形 |
| H | 横六边形 |
| + | 加号 |
| x | 叉号 |
| d | 小菱形 |
| D | 大菱形 |
| | | 垂直线 |
参数 marker 的取值非常多,我们并不需要记住,在实际开发中需要用到的时候回来这里查一下就可以了。
参数 markersize 用于定义节点的大小,它还可以简写为 “ms”。参数 markerfacecolor 用于定义节点的颜色,它还可以简写为 “mfc”。参数 markeredgecolor 用于定义边框的颜色,它还可以简写为 “mec” 。
示例 6:实心圆
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, marker='o')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
把节点定义成实心圆,我们知道怎么去实现了。但是如果想要定义成空心圆,又该怎么去做呢?我们只需要将 markerfacecolor 设置为白色就可以了,代码如下。
plt.plot(x, y, marker='o', markerfacecolor='white') # 节点为空心圆再次运行之后,效果如下图所示。

示例 7:节点大小
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, marker='o', markersize=10)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
在这个例子中,markersize=10 表示定义节点大小为 10 像素。由于 markersize 可以简写为 ms,所以下面 2 种方式是等价的。
# 方式 1
plt.plot(x, y, marker='o', markersize=10)
# 方式 2
plt.plot(x, y, marker='o', ms=10)示例 8:节点颜色和边框颜色
import matplotlib.pyplot as plt
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='orange', markeredgecolor='red')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
在这个例子中,markerfacecolor='orange' 表示定义节点颜色为 “orange(橙色)”,markeredgecolor='red' 表示定义边框颜色为 “red(红色)”。
由于 markerfacecolor 可以简写为 “mfc”,而 markeredgecolor 可以简写为 “mec”,所以对于这个例子来说,下面 2 种方式是等价的。
# 方式 1
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='orange', markeredgecolor='red')
# 方式 2
plt.plot(x, y, marker='o', markersize=10, mfc='orange', mec='red')最后需要说明一点,数据可视化的目的是为了绘制一个用户体验更好的图表,所以大多数可视化库都会提供各种用于自定义样式的方法或参数,这样做的目的是为了给开发者实现一个定制化更高的图表。所以我们在学习一个可视化库的时候,除了学习如何绘制一个基本图表之外,其他更多就是学习各种样式定义了。了解这一点,可以让我们学习思路变得更加的清晰。
Matplotlib 折线图案例
首先在当前项目下创建一个名为 “data” 的文件夹,然后在该文件夹中创建一个 guangzhou.csv 文件,项目结构如下图所示。其中,guangzhou.csv 文件保存的是广州一年内每个月的最高气温和最低气温,内容如下图所示。


示例 9:折线图案例
import pandas as pd
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 读取数据
df = pd.read_csv('data/guangzhou.csv')
plt.plot(df['月份'], df['最高'], marker='o', markerfacecolor='white')
plt.plot(df['月份'], df['最低'], marker='o', markerfacecolor='white')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
对于 plt.plot(x, y) 来说,x 和 y 除了可以是一个列表之外,还可以是一个系列(Series)。我们都知道,DataFrame 的一列本质上就是一个 Series。小伙伴们要记住这么一点:大多数绘图函数的数据除了是一个列表,还可以是一个 Series。
Series 和 DataFrame 是 Pandas 的数据结构,这些都是数据分析的基础。这也是为什么我们在一开始就强调:一定要先学习数据分析,然后再来学习数据可视化,不然很多东西会看不懂。
