3分钟

任务 3 绘制折线图

任务目的

这一步会介绍折线图的概念,折线图的绘制流程以及相关参数。同时借助过一个温度曲线绘制的示例,展示折线图的具体绘制流程。

任务步骤

1.折线图介绍

(1)折线图概述

折线图是一种以折线的上升或下降来表示统计数量的增减变化的统计图。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的变化趋势。

(2)折线图的绘制流程

在上一个步骤里介绍Matplotlib时,已经通过一个示例简单展示了折线图的绘制。绘制折线图的方法是matplotlib.pyplot.plot()。传递参数时可以只输入y坐标的值(x坐标的值将会自动填充),也可以同时输入x,y的坐标值。

比如要绘制y=x^2中几个点连成的折线图,可以执行以下命令(需要先执行准备实验环境的操作):

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])  # [1, 2, 3, 4]对应4个点的x坐标,[1, 4, 9, 16]对应4个点的y坐标

执行代码后绘制的折线图展示效果如下:

4-3-1 折线图绘制示例

折线图同样可以用于绘制曲线,如绘制函数y=x^2在第一象限的部分,可以使用下方的代码:

plt.plot([a for a in range(1000)], [b*b for b in range(1000)])  # 绘制y=x^2在第一象限的部分
plt.xlabel('value x')
plt.ylabel('value y')

绘制完成的图像展示效果如下:

4-3-2 使用折线图绘制曲线

同样的道理,也可以使用折线图绘制类似正弦曲线、余弦曲线等各种函数曲线。但这些“曲线”严格意义上来说是许多个点连成一条条线段,只是由于图像上的点足够多,观感上像一条曲线。

在上面的示例中,除了修改x,y坐标的值,同时还定义了x,y轴的标题,分别用方法plt.xlabel()plt.ylabel()来进行定义,这有助于帮助我们更准确的理解图像中传递的信息。

既然已经熟悉了折线图的基本绘制流程,接下来将通过一个具体的示例,强化学员对于折线图的理解与掌握。

2.示例——使用折线图绘制温度曲线

下面会以温度曲线为例,展示折线图的具体应用。

首先需要创建一个新的笔记本,本实验中创建一个名为【Matplotlib-Demo】的笔记本,用于记录此处和后续步骤中展示的示例。

实验的第一步需要先准备实验环境,在单元格中粘贴下方代码:

%matplotlib inline
import matplotlib.pyplot as plt  # 导入pyplot模块
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False  # 解决正负号乱码问题

使用快捷键【Shift+Enter】,可以运行单元格中的代码。

每一行代码的具体作用已经通过注释的形式添加在代码的右侧,除了先前的准备工作之外,此处额外添加了两行代码用于解决显示中的乱码问题。

接下来便可以结合数据呈现温度曲线的统计数据,此处使用北京的全年逐月平均温度作为演示数据,折线图绘制代码如下:

months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']  # 准备月份信息
temps = [-3, 0, 8, 15, 22, 26, 28, 27, 21, 14, 5, -1]  # 准备温度数据
plt.plot(months, temps)  # 绘制温度折线图
plt.xlabel("月份")  # 添加x轴标签
plt.ylabel("温度(单位:℃)")  # 添加y轴标签
plt.title("北京市全年逐月平均温度")  # 添加图表标题

运行代码后将会绘制出如下的温度曲线图:

4-3-3 平均温度曲线绘制

除了先前使用到的plt.xlabel()plt.ylabel()这些标签之外,此处还使用了plt.title()来添加图表的标题。

至此一个平均温度的统计图表已经完成了绘制。接下来会对展示图进行一些调整和优化,使其在页面上呈现更好的展示效果。将绘制代码更新为下方代码并运行:

months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']  # 准备月份信息
temps = [-3, 0, 8, 15, 22, 26, 28, 27, 21, 14, 5, -1]  # 准备温度数据
plt.figure(figsize=(16, 4), dpi=150)  # 定义画布尺寸和分辨率
plt.grid(linestyle=":", alpha=0.5)  # 添加画布网格
plt.plot(months, temps)  # 绘制温度折线图
plt.xlabel("月份")  # 添加x轴标签
plt.ylabel("温度(单位:℃)")  # 添加y轴标签
plt.title("北京市全年逐月平均温度")  # 添加图表标题

相比原来的代码,变化在于新增了以下两行代码:

plt.figure(figsize=(16, 4), dpi=150)  # 定义画布尺寸和分辨率
plt.grid(linestyle=":", alpha=0.5)  # 添加画布网格

其中方法plt.figure()可以用于定义画布的信息,此处主要定义了画布的尺寸和分辨率;方法plt.grid()用于定义画布的网格,此处指定了网格的线形(linestyle)和透明度(alpha)。

优化后的温度曲线图具有更合适的长宽比,同时还添加了画布网格线。展示效果如下:

4-3-4 优化平均温度曲线

接下来要尝试在同一张图上添加两条折线,对应全年逐月平均最高/最低气温的曲线。相关的代码如下:

months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']  # 准备月份信息
max_temps = [2, 6, 14, 21, 28, 31, 32, 31, 26, 19, 10, 4]  # 准备平均最高温度数据
min_temps = [-7, -5, 2, 9, 16, 20, 24, 22, 17, 9, 1, -5]  # 准备平均最低温度数据
plt.figure(figsize=(16, 4), dpi=150)  # 定义画布尺寸和分辨率
plt.grid(linestyle=":", alpha=0.5)  # 添加画布网格
plt.xlabel("月份")  # 添加x轴标签
plt.ylabel("温度(单位:℃)")  # 添加y轴标签
plt.title("北京市全年逐月平均最高/最低温度")  # 添加图表标题
plt.plot(months, max_temps, color="r", label="平均最高温度")  # 绘制平均最高温度折线图
plt.plot(months, min_temps, color="b", label="平均最低温度")  # 绘制平均最低温度折线图
plt.legend()  # 绘制图例,需要先在绘制曲线的同时,添加曲线的label标签

运行代码绘制图像,最终得到的图像效果如下:

4-3-5 同时绘制两条折线

接下来会对新增和修改的代码进行说明:

首先由于需要绘制两条曲线,所以需要同时准备平均最高温度和平均最低温度两份y轴的数据:

max_temps = [2, 6, 14, 21, 28, 31, 32, 31, 26, 19, 10, 4]  # 准备平均最高温度数据
min_temps = [-7, -5, 2, 9, 16, 20, 24, 22, 17, 9, 1, -5]  # 准备平均最低温度数据

接下来需要执行两次plt.plot()方法,依次传入不同的温度数据,分别用于绘制最高平均温度、最低平均温度两条曲线:

plt.plot(months, max_temps, color="r", label="平均最高温度")  # 绘制平均最高温度折线图
plt.plot(months, min_temps, color="b", label="平均最低温度")  # 绘制平均最低温度折线图

此处绘制曲线添加了额外的两个参数。color用于指定线条的颜色,常用的颜色代码及说明如下:

颜色代码

对应颜色

b

blue——蓝色

c

cyan——青色

g

green——绿色

k

black——黑色

m

magenta——洋红

r

red——红色

w

white——白色

y

yellow——黄色

同时为了添加图例说明信息(位于图片右上角),需要为每条折线添加一个label属性,分别对应两条折线的图例名。最后通过代码plt.legend(),即可完成图例的绘制。

注:本例中使用的数据参考自 中国天气网-北京历史天气数据

至此关于折线图的两个示例已经绘制完成,接下来将会介绍柱状图的绘制流程。