Matplotlib 折线图

在 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绘制一条折线

分析:

如果想要使用 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 窗口除了展示图表之后,还提供了很多便捷的功能,如下图所示。这些功能包括保存成一张图片、对窗口进行配置等,小伙伴们可以自行摸索一下。

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()

运行之后,效果如下图所示。

Matplotlib绘制多条折线

分析:

在一个图表中,我们不仅可以绘制一条折线,还可以同时绘制多条折线。想要在一个图表中绘制多条折线也很简单,我们只需要调用多次 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 种方式:一种是 “关键字”,另一种是 “字符”,如下表所示。

参数 linestyle 的取值
关键字
solid(默认值) 实线
dashed 虚线
dotted 点线
dashdot 点划线
字符
-(默认值) 实线
-- 虚线
: 点线
-. 点划线

参数 color 用于定义线条的颜色,它常用的取值有 2 种:① 关键字;② 十六进制 RGB 值。其中,关键字指的是颜色的英文名称,比如 red、green、blue 等。而十六进制 RGB 值指的是类似 “#FBF9D0” 这样的值。

如果使用关键字满足不了需求,我们就得借助十六进制 RGB 值了,相信经常使用 Photoshop 的小伙伴对这种值不会陌生。可能小伙伴就会问了,这种十六进制 RGB 值是怎么获取的呢?

我们可以使用一个名为 “Color Express” 的软件(如下图所示),来获取到十六进制 RGB 值。对于 Color Express 这个软件,小伙伴们可以自行搜一下。

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()

运行之后,效果如下图所示。

Matplotlib折线使用虚线

分析:

对于这个例子来说,下面 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()

运行之后,效果如下图所示。

Matplotlib改变线条颜色

分析:

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()

运行之后,效果如下图所示。

Matplotlib改变线条宽度

分析:

在这个例子中,linewidth=3 表示定义线条的宽度为 3 像素。

2. 节点样式

在 Matplotlib 中,用于定义节点样式的参数有 4 个,如下表所示。

节点样式的参数
参数 说明
marker 节点外观
markersize 或 ms 节点大小
markerfacecolor 或 mfc 节点颜色
markeredgecolor 或 mec 边框颜色

参数 marker 用于定义节点的外观,它常用的取值如下表所示。

参数 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()

运行之后,效果如下图所示。

Matplotlib折线节点使用实心圆

分析:

把节点定义成实心圆,我们知道怎么去实现了。但是如果想要定义成空心圆,又该怎么去做呢?我们只需要将 markerfacecolor 设置为白色就可以了,代码如下。

plt.plot(x, y, marker='o', markerfacecolor='white')    # 节点为空心圆

再次运行之后,效果如下图所示。

Matplotlib折线节点使用空心圆

示例 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()

运行之后,效果如下图所示。

Matplotlib改变折线的节点大小

分析:

在这个例子中,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()

运行之后,效果如下图所示。

Matplotlib改变折线节点颜色

分析:

在这个例子中,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 文件保存的是广州一年内每个月的最高气温和最低气温,内容如下图所示。

Matplotlib折线图的项目结构

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()

运行之后,效果如下图所示。

Matplotlib绘制广州气温折线图

分析:

对于 plt.plot(x, y) 来说,x 和 y 除了可以是一个列表之外,还可以是一个系列(Series)。我们都知道,DataFrame 的一列本质上就是一个 Series。小伙伴们要记住这么一点:大多数绘图函数的数据除了是一个列表,还可以是一个 Series

Series 和 DataFrame 是 Pandas 的数据结构,这些都是数据分析的基础。这也是为什么我们在一开始就强调:一定要先学习数据分析,然后再来学习数据可视化,不然很多东西会看不懂。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号