学习目标★掌握 matplotlib 的绘图函数,并能绘制简单的图表第 1 章使用 matplotlib 快速绘制了一个图表,让读者真切体会到 matplotlib 的强大之处。matplotlib 之所以能成为如此优秀的绘图工具,离不开其丰富的 API,使用这些 API 可以轻松绘制常见的图表,使数据可视化变得轻而易举。本章将带领大家了解 matplotlib.pyplot 的绘图函数,并使用这些函数绘制简单的图表,包括折线图、柱形图或堆积柱形图、条形图或堆积条形图、堆积面积图、直方图、饼图或圆环图、散点图或气泡图、箱形图、雷达图、误差棒图。
2.1 绘制折线图2.1.1 使用 plot() 绘制折线图使用 pyplot 的 plot() 函数可以快速绘制折线图。plot() 函数的语法格式如下所示 :plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None,* args, ** kwargs)该函数常用参数的含义如下。· x :表示 x 轴的数据。· y :表示 y 轴的数据。·fmt :表示快速设置线条样式的格式字符串。·label :表示应用于图例的标签文本。plot() 函数会返回一个包含 Line2D 类对象(代表线条)的列表。使用 pyplot 的 plot() 函数还可以绘制具有多个线条的折线图,通过以下任意一种方式均可以完成。(1)多次调用 plot() 函数来绘制具有多个线条的折线图,示例代码如下 :plt.plot(x1, y1)plt.plot(x2, y2)(2)调用 plot() 函数时传入一个二维数组来绘制具有多个线条的折线图。例如,将二维数组 arr 的第一行数据作为 x 轴的数据、其他行数据全部作为 y 轴的数据,代码如下。arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])plt.plot(arr[0], arr[1:])(3)调用 plot() 函数时传入多组数据来绘制具有多个线条的折线图,示例代码如下 :plt.plot(x1, y1, x2, y2)2.1.2 实例 1 :未来 15 天最高气温和最低气温俗话说“天有不测风云”,说明天气是变幻莫测的。人们的生活离不开天气预报,无论 第 2 章 使用 matplotlib 绘制简单图表 023是居家还是外出,人们都时刻关注着天气的变化,以便随时备好伞具、增减衣服,或者为出根据表 2-1 的数据,将“日期”这一列的数据作为 x 轴的数据,将“最高气温”和“最低气温”两列的数据作为 y 轴的数据,使用 plot() 函数绘制反映最高气温和最低气温趋势的折线图,具体代码如下。In [1]:# 01_maximum_minimum_temperaturesimport matplotlib.pyplot as pltimport numpy as npx = np.arange(4, 19)y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])# 绘制折线图plt.plot(x, y_max)plt.plot(x, y_min)plt.show()以上代码首先导入了 matplotlib.pyplot 和 numpy 模块,分别将这两个模块重命名为 plt 和np,其次将表 2-1 的数据分别作为 x 轴和 y 轴的数据,然后连续两次调用 plot() 函数分别绘制了两条折线,最后调用 show() 函数进行展示。图 2-1 中, x 轴代表日期, y 轴代表温度,位于上方的蓝色折线和下方的橙色折线分别代表最高温度和最低温度。由图 2-1 可知,北京市未来 15 天的最高气温和最低气温都呈现逐步下降后反弹的趋势。2.2 绘制柱形图或堆积柱形图2.2.1 使用 bar() 绘制柱形图或堆积柱形图使用 pyplot 的 bar() 函数可以快速绘制柱形图或堆积柱形图。bar() 函数的语法格式如下所示 :bar(x, height, width=0.8, bottom=None, align='center',data=None, tick_label=None, xerr=None, yerr=None,error_kw=None, ** kwargs)该函数常用参数的含义如下。·x :表示柱形的 x 坐标值。·height :表示柱形的高度。·width :表示柱形的宽度,默认为 0.8。·bottom :表示柱形底部的 y 坐标值,默认为 0。·align :表示柱形的对齐方式,有 'center' 和 'edge' 两个取值,其中 'center' 表示将柱形与刻度线居中对齐 ;'edge' 表示将柱形的左边与刻度线对齐。·tick_label :表示柱形对应的刻度标签。·xerr,yerr :若未设为 None,则需要为柱形图添加水平 / 垂直误差棒。·error_kw :表示误差棒的属性字典,字典的键对应 errorbar() 函数(2.10 节会介绍)的关键字参数。bar() 函数会返回一个 BarContainer 类的对象。BarContainer 类的对象是一个包含矩形或误
差棒的容器,它亦可以视为一个元组,可以遍历获取每个矩形条或误差棒。此外,BarContainer类的对象也可以访问 patches 或 errorbar 属性,从而获取图表中所有的矩形条或误差棒。例如,使用 bar() 函数绘制柱形图,代码如下。
In [2]:import numpy as npimport matplotlib.pyplot as pltx = np.arange(5)y1 = np.array([10, 8, 7, 11, 13])# 柱形的宽度bar_width = 0.3# 绘制柱形图plt.bar(x, y1, tick_label=['a', 'b', 'c', 'd', 'e'], width=bar_width)plt.show()使用 pyplot 的 bar() 函数还可以绘制具有多组柱形的柱形图。例如,使用 bar() 函数绘制一个具有两组柱形的柱形图,代码如下。In [3]:x = np.arange(5)y1 = np.array([10, 8, 7, 11, 13])y2 = np.array([9, 6, 5, 10, 12])# 柱形的宽度bar_width = 0.3# 根据多组数据绘制柱形图plt.bar(x, y1, tick_label=['a', 'b', 'c', 'd', 'e'], width=bar_width)plt.bar(x + bar_width, y2, width=bar_width)plt.show()在使用 pyplot 的 bar() 函数绘制图表时,可以通过给 bottom 参数传值的方式控制柱形的 y值,使后绘制的柱形位于先绘制的柱形的上方。例如,使用 bar() 函数绘制由两组柱形堆叠而成的堆积柱形图,代码如下。此外,在使用 pyplot 的 bar() 函数绘制图表时可以通过给 xerr、yerr 参数传值的方式为柱形添加误差棒,示例代码如下 :In [5]: