Python 数据可视化 · 第 2 章

使用 matplotlib
绘制简单图表

从折线图到误差棒图,本章用 10 个绘图函数、10 个实战实例,把一组组枯燥的数字变成一眼可读的图形。

10种图表类型
10个实战实例
10个核心绘图函数

Learning Objectives

学习目标

本章围绕 10 种基础图表的绘制展开,学习完成后应能独立完成数据到图表的转换。

01

折线图与柱形图

掌握绘制折线图,绘制柱形图或堆积柱形图。

plot() · bar()

02

条形图与面积图

掌握绘制条形图或堆积条形图,绘制堆积面积图、直方图。

barh() · stackplot() · hist()

03

饼图与散点图

掌握绘制饼图或圆环图,绘制散点图或气泡图。

pie() · scatter()

04

统计类图表

掌握绘制箱形图,绘制雷达图,绘制误差棒图。

boxplot() · polar() · errorbar()

Contents

目录

2.1

绘制折线图

折线图用于展示数据随时间、顺序等连续变量变化的趋势。

2.1.1使用 plot() 绘制折线图

使用 pyplot 的 plot() 函数可以快速地绘制折线图。

语法

plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None, *args, **kwargs)
x
表示 x 轴的数据,默认值为 range(len(x))。
y
表示 y 轴的数据。
fmt
表示快速设置线条样式的格式字符串。可选参数 fmt 是一个字符串,用来定义图的基本属性,如颜色(color)、点型(marker)、线型(linestyle),具体形式为 fmt = '[color][marker][line]'。
label
表示应用于图例的标签文本。

plot() 函数会返回一个包含 Line2D 类对象(代表线条)的列表。

使用 pyplot 的 plot() 函数还可以绘制具有多个线条的折线图,通过以下任意一种方式均可以完成。

第 1 种

plt.plot(x1, y1)
plt.plot(x2, y2)

第 2 种

plt.plot(x1, y1, x2, y2)

第 3 种

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10, 11, 12]])
plt.plot(arr[0], arr[1:])

2.1.2实例 1:未来 15 天最高气温和最低气温

实例 1

北京市未来 15 天的最高气温和最低气温

人们每天的生活离不开天气预报,无论是居家还是外出,人们都时刻关注着天气的变化,以便随时备好伞具、增减衣服,或者为后期的出行计划做好准备。本实例要求根据下表的数据,将日期列的数据作为 x 轴数据,将最高气温和最低气温两列的数据作为 y 轴数据,使用 plot() 函数绘制折线图。

表 2-1 北京市未来 15 天的最高气温和最低气温单位:℃

日期最高气温最低气温
9 月 4 日3219
9 月 5 日3319
9 月 6 日3420
9 月 7 日3422
9 月 8 日3322
9 月 9 日3121
9 月 10 日3022
9 月 11 日2916
9 月 12 日3018
9 月 13 日2918
9 月 14 日2617
9 月 15 日2314
9 月 16 日2115
9 月 17 日2516
9 月 18 日3116

图 2-2 未来 15 天最高气温和最低气温折线图(日期为 x 轴,温度 ℃ 为 y 轴)

由图可知,未来 15 天的最高气温和最低气温都呈现逐步下降后反弹的趋势。
2.2

绘制柱形图或堆积柱形图

柱形图以柱形的高度表示数值大小,便于比较不同类别的数量差异。

2.2.1使用 bar() 绘制柱形图或堆积柱形图

使用 pyplot 的 bar() 函数可以快速地绘制柱形图或堆积柱形图。

语法

bar(x, height, width=0.8, bottom=None, align='center', tick_label=None, xerr=None, yerr=None, **kwargs)
x
表示柱形的 x 坐标值。
height
表示柱形的高度。
width
表示柱形的宽度,默认为 0.8。
bottom
表示柱形底部的 y 值,默认为 0。
tick_label
表示柱形对应的刻度标签。
xerr、yerr
若未设为 None,则需要为柱形图添加水平/垂直误差棒。

bar() 函数会返回一个 BarContainer 类的对象。BarContainer 类的对象是一个包含柱形或误差棒的容器,它亦可以视为一个元组,可以遍历获取每个柱形或误差棒;也可以访问 patches 或 errorbar 属性,分别获取图表中所有的柱形或误差棒。

绘制有一组柱形的柱形图

x = 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)

绘制有两组柱形的柱形图

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

绘制堆积柱形图

通过给 bar() 函数的 bottom 参数传值,控制柱形的 y 值,使后绘制的柱形位于先绘制的柱形的上方。

# 绘制堆积柱形图
plt.bar(x, y1,
        tick_label=['a','b','c','d','e'],
        width=bar_width)
plt.bar(x, y2, bottom=y1,
        width=bar_width)

绘制有误差棒的柱形图

通过给 xerr、yerr 参数传值的方式,可以为柱形添加误差棒。

# 偏差数据
error = [2, 1, 2.5, 2, 1.5]
# 绘制带有误差棒的柱形图
plt.bar(x, y1,
        tick_label=['a','b','c','d','e'],
        width=bar_width)
plt.bar(x, y1, bottom=y1,
        width=bar_width, yerr=error)

2.2.2实例 2:2013~2019 财年阿里巴巴淘宝和天猫平台的 GMV

实例 2

2013~2019 财年淘宝和天猫平台的 GMV

随着互联网与电子商务的快速发展,人们的消费模式发生了翻天覆地的变化,越来越多的消费者选择网络购物,省时省力。阿里巴巴公司作为中国电商的引领者,其旗下的淘宝和天猫是深受消费者欢迎的网购平台。本实例要求根据下表的数据,将财年列的数据作为 x 轴数据,将 GMV 列的数据作为 y 轴数据,使用 bar() 函数绘制柱形图。

表 2-2 2013—2019 财年淘宝和天猫平台的 GMV单位:亿元

财年GMV
FY201310770
FY201416780
FY201524440
FY201630920
FY201737670
FY201848200
FY201957270

图 2-7 2013—2019 财年 GMV 柱形图(柱形宽度 0.5,x 轴为财年,y 轴为 GMV 亿元)

2013~2019 财年的成交总额逐年增加,至 2019 年已经达到近 60000 亿元。
2.3

绘制条形图或堆积条形图

条形图把类别放在纵轴、数值放在横轴,适合类别名称较长或类别数量较多的场景。

2.3.1使用 barh() 绘制条形图或堆积条形图

使用 pyplot 的 barh() 函数可以快速地绘制条形图或堆积条形图。

语法

barh(y, width, height=0.8, left=None, align='center', *, **kwargs)
y
表示条形的 y 值。
width
表示条形的宽度。
height
表示条形的高度,默认值为 0.8。
left
条形左侧的 x 坐标值,默认值为 0。
align
表示条形的对齐方式,默认值为 “center”,即条形与刻度线居中对齐。
tick_label
表示条形对应的刻度标签。
xerr、yerr
若未设为 None,则需要为条形图添加水平/垂直误差棒。

barh() 函数会返回一个 BarContainer 类的对象。

绘制有一组条形的条形图

y = np.arange(5)
x1 = np.array([10, 8, 7, 11, 13])
# 条形的高度
bar_height = 0.3
# 绘制条形图
plt.barh(y, x1,
         tick_label=['a','b','c','d','e'],
         height=bar_height)

绘制有两组条形的条形图

y = np.arange(5)
x1 = np.array([10, 8, 7, 11, 13])
x2 = np.array([9, 6, 5, 10, 12])
bar_height = 0.3
plt.barh(y, x1,
         tick_label=['a','b','c','d','e'],
         height=bar_height)
plt.barh(y+bar_height, x2,
         height=bar_height)

绘制堆积条形图

通过给 barh() 函数的 left 参数传值,控制条形的 x 值,使后绘制的条形位于先绘制的条形右方。

# 绘制堆积条形图
plt.barh(y, x1,
         tick_label=['a','b','c','d','e'],
         height=bar_height)
plt.barh(y, x2, left=x1,
         height=bar_height)

绘制有误差棒的条形图

通过给 xerr、yerr 参数传值的方式,可以为条形添加误差棒。

# 偏差数据
error = [2, 1, 2.5, 2, 1.5]
# 绘制带有误差棒的条形图
plt.barh(y, x1,
         tick_label=['a','b','c','d','e'],
         height=bar_height)
plt.barh(y, x2, left=x1,
         height=bar_height, xerr=error)

2.3.2实例 3:各商品种类的网购替代率

实例 3

各商品种类的网购替代率

网络购物已经成为人们日常生活的一部分,它在创造新的消费方式的同时,也在改变着人们的消费模式和习惯,成为拉动居民消费的重要渠道。国家统计局抽取了 771 个样本,并根据这些样本测算用户网购替代率(网购用户线上消费对线下消费的替代比率)的情况。本实例要求根据下表的数据,将商品种类列的数据作为 y 轴的刻度标签,将替代率列的数据作为 x 轴数据,使用 barh() 函数绘制条形图。

表 2-3 各商品种类的网购替代率(部分)

商品种类替代率
家政、家教、保姆等生活服务95.9%
飞机票、火车票95.1%
家具93.5%
手机、手机配件92.4%
计算机及其配套产品89.3%
汽车用品89.2%
通信充值、游戏充值86.5%
个人护理用品86.3%
书报杂志及音像制品86.0%

下表为部分数据,右侧图表按全部 18 个商品种类绘制。

图 2-9 各商品种类网购替代率条形图(条形高度 0.6,x 轴为网购替代率)

由图可知,工艺品、收藏品的网购替代率最低,家政、家教、保姆等生活服务的网购替代率最高。
2.4

绘制堆积面积图

堆积面积图在折线图与 x 轴之间填充颜色,并把多条数据层层堆叠,既看总量也看构成。

2.4.1使用 stackplot() 绘制堆积面积图

使用 pyplot 的 stackplot() 函数可以快速地绘制堆积面积图。

语法

stackplot(x, y, labels=(), baseline='zero', data=None, *args, **kwargs)
x
表示 x 轴的数据,可以是一维数组。
y
表示 y 轴的数据,可以是二维数组或一维数组序列。
labels
表示每个填充区域的标签。
baseline
表示计算基线的方法,包括 zero、sym、wiggle 和 weighted_wiggle。其中 zero 表示恒定零基线,即简单的叠加图;sym 表示对称于零基线;wiggle 表示最小化平方斜率之和;weighted_wiggle 表示执行相同的操作,但权重用于说明每层的大小。

绘制有三个填充区域堆叠的堆积面积图

x = np.arange(6)
y1 = np.array([1, 4, 3, 5, 6, 7])
y2 = np.array([1, 3, 4, 2, 7, 6])
y3 = np.array([3, 4, 3, 6, 5, 5])
# 绘制堆积面积图
plt.stackplot(x, y1, y2, y3)

2.4.2实例 4:物流公司物流费用统计

实例 4

A、B、C 物流公司物流费用统计

近些年我国物流行业蓬勃发展,目前已经有近几千家物流公司,其中部分物流公司大打价格战,以更低的价格吸引更多的客户,从而抢占市场份额。本实例要求根据下表的数据,将月份列的数据作为 x 轴的刻度标签,将 A 公司、B 公司、C 公司这三列数据作为 y 轴的数据,使用 stackplot() 函数绘制堆积面积图。

表 2-4 A、B、C 物流公司物流费用统计单位:万元

月份A 公司B 公司C 公司
1198203185
2215236205
3245200226
4222236199
5200269238
6236216200
7201298250
8253333209
9236301246
10200349219
11266360253
12290368288

图 2-13 A、B、C 公司物流费用堆积面积图(x 轴为月份,y 轴为物流费用 万元)

B 公司的物流费用呈现明显的增长趋势,A 公司和 C 公司的物流费用呈现平缓的波动趋势。
2.5

绘制直方图

直方图把连续数据分段(bins)统计频数,用来观察数据的分布形态。

2.5.1使用 hist() 绘制直方图

使用 pyplot 的 hist() 函数可以快速地绘制直方图。

语法

hist(x, bins=None, range=None, density=None, weights=None,
     bottom=None,  **kwargs)
x
表示 x 轴的数据。
bins
表示矩形条的个数,默认为 10。
range
表示数据的范围,若未设置范围,默认数据范围为 (x.min(), x.max())。
cumulative
表示是否计算累计频数或频率。
histtype
表示直方图的类型,支持 'bar'、'barstacked'、'step'、'stepfilled' 四种取值,其中 'bar' 为默认值,代表传统的直方图;'barstacked' 代表堆积直方图;'step' 代表未填充的线条直方图;'stepfilled' 代表填充的线条直方图。
align
表示矩形条边界的对齐方式,可设置为 'left'、'mid' 或 'right',默认为 'mid'。
orientation
表示矩形条的摆放方式,默认为 'vertical',即垂直方向。
rwidth
表示矩形条宽度的百分比,默认为 0。若 histtype 的值为 'step' 或 'stepfilled',则直接忽略 rwidth 参数的值。
stacked
表示是否将多个矩形条以堆叠形式摆放。

绘制填充的线条直方图

# 准备 50 个随机测试数据
scores = np.random.randint(0, 100, 50)
# 绘制直方图
plt.hist(scores, bins=8,
         histtype='stepfilled')

2.5.2实例 5:人脸识别的灰度直方图

实例 5

人脸识别的灰度直方图

人脸识别技术是一种生物特征识别技术,它通过从装有摄像头的终端设备拍摄的人脸图像中抽取人的个性化特征,以此来识别人的身份。灰度直方图是实现人脸识别的方法之一,它将数字图像的所有像素按照灰度值的大小统计其出现的频率。本实例要求使用一组 10000 个随机数作为人脸图像的灰度值,使用 hist() 函数绘制灰度直方图。

本实例的绘图代码

import numpy as np
import matplotlib.pyplot as plt

# 10000 个随机数
random_state = np.random.RandomState(19680801)
radom_x = random_state.randn(10000)
# 绘制包含 25 个矩形条的直方图
plt.hist(radom_x, bins=25)

随机种子取 19680801,保证每次运行得到相同的分布。

图 2-17 灰度直方图(25 个矩形条,x 轴为灰度值,y 轴为频率)

由图可知,位于 -0.5~0 之间的灰度值最多,位于 -4~-3 或 3~4 之间的灰度值最少。
2.6

绘制饼图或圆环图

饼图用扇形的面积表示各部分占总体的比例,圆环图则在中心留出空白。

2.6.1使用 pie() 绘制饼图或圆环图

使用 pyplot 的 pie() 函数可以快速地绘制饼图或圆环图。

语法

pie(x, explode=None, labels=None, autopct=None, pctdistance=0.6,
    startangle=None, *, data=None)
x
表示扇形或楔形的数据。
explode
表示扇形或楔形离开圆心的距离。
labels
表示扇形或楔形对应的标签文本。
autopct
表示控制扇形或楔形的数值显示的字符串,可通过格式字符串指定小数点后的位数。
pctdistance
表示扇形或楔形对应的数值标签距离圆心的比例,默认为 0.6。
shadow
表示是否显示阴影。
labeldistance
表示标签文本的绘制位置(相对于半径的比例),默认为 1.1。
startangle
表示起始绘制角度,默认从 x 轴的正方向逆时针绘制。
radius
表示扇形或楔形围成的圆形半径。
wedgeprops
表示控制扇形或楔形属性的字典。例如通过 wedgeprops={'width': 0.7} 将楔形的宽度设为 0.7。
textprops
表示控制图表中文本属性的字典。
center
表示图表的中心点位置,默认为 (0, 0)。
frame
表示是否显示图框。

绘制饼图

data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A','B','C','D','E','F'])
# 绘制饼图:半径为 0.5,
# 数值保留 1 位小数
plt.pie(data, radius=1.5,
        labels=pie_labels,
        autopct='%3.1f%%')

绘制圆环图

data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A','B','C','D','E','F'])
# 绘制圆环图
plt.pie(data, radius=1.5,
        wedgeprops={'width': 0.7},
        labels=pie_labels,
        autopct='%3.1f%%',
        pctdistance=0.75)

2.6.2实例 6:支付宝月账单报告

实例 6

用户 A 某月支付宝消费明细

近年来随着支付 App 的出现,人们的生活发生了翻天覆地的变化,无论是到超市选购商品,还是跟朋友聚餐,或是来一场说走就走的旅行,都可以使用移动支付 App 轻松完成支付,非常便捷。支付宝是人们使用较多的支付方式,它拥有自动记录每月账单的功能,可以方便用户了解每月资金的流动情况。本实例要求根据下表的数据,将分类列的数据作为饼图的标签,将各分类对应的金额与总支出金额的比例作为饼图的数据,使用 pie() 函数绘制饼图。

表 2-5 用户 A 某月使用支付宝的消费明细单位:元

分类金额
购物800
人情往来100
餐饮美食1000
通信物流200
生活日用300
交通出行200
休闲娱乐200
其他200
总支出3000

图 2-21 支付宝月账单饼图(起始角度 90,离开圆心距离 0.1,显示阴影)

绿色扇形的面积最大,说明餐饮美食方面的支出在当月总支出中占比最大;橙色扇形的面积最小,说明人情往来的支出在当月总支出中占比最小。
2.7

绘制散点图或气泡图

散点图观察两组变量之间的关系,气泡图则用点的大小额外承载一个维度。

2.7.1使用 scatter() 绘制散点图或气泡图

使用 pyplot 的 scatter() 函数可以快速地绘制散点图或气泡图。

语法

scatter(x, y, s=None, c=None, marker=None, cmap=None, linewidths=None, edgecolors=None, *, **kwargs)
x,y
表示数据点的位置。
s
表示数据点的大小。
c
表示数据点的颜色。
marker
表示数据点的样式,默认为圆形。
alpha
表示透明度,可以取值为 0~1。
linewidths
表示数据点的描边宽度。
edgecolors
表示数据点的描边颜色。

绘制散点图

num = 50
x = np.random.rand(num)
y = np.random.rand(num)
plt.scatter(x, y)

绘制气泡图

num = 50
x = np.random.rand(num)
y = np.random.rand(num)
area = (30 * np.random.rand(num))**2
plt.scatter(x, y, s=area)

2.7.2实例 7:汽车速度与制动距离的关系

实例 7

车速与制动距离的关系

汽车的制动距离主要取决于汽车的车速。若车速增加 1 倍,则汽车的制动距离将增大至近 4 倍。某汽车生产公司对一批丰田汽车进行抽样测试,并分别记录了不同的车速对应的制动距离。本实例要求根据下表的数据,将车速(km/h)列的数据作为 x 轴的数据,将制动距离(m)列的数据作为 y 轴的数据,使用 scatter() 函数绘制散点图。

表 2-6 车速与制动距离的关系

车速(km/h)制动距离(m)车速(km/h)制动距离(m)
100.511059.5
202.012070.8
304.413083.1
407.914096.4
5012.3150110.7
6017.7160126.0
7024.1170142.2
8031.5180159.4
9039.9190177.6
10049.2200196.8

图 2-25 车速与制动距离散点图(x 轴为车速 km/h,y 轴为制动距离 m)

由图可知,恒定条件下,制动距离随着车速的增大而增加。
2.8

绘制箱形图

箱形图用四分位数与上下须描述数据的分布,并单独标出异常值。

2.8.1使用 boxplot() 绘制箱形图

使用 pyplot 的 boxplot() 函数可以快速地绘制箱形图。

语法

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, *, data=None)
x
绘制箱形图的数据。
sym
表示异常值对应的符号,默认为空心圆圈。
vert
表示是否将箱形图垂直摆放,默认为垂直摆放。
whis
表示箱形图上下须与上下四分位的距离,默认为 1.5 倍的四分位差。
positions
表示箱体的位置。
widths
表示箱体的宽度,默认为 0.5。
patch_artist
表示是否填充箱体的颜色,默认不填充。
meanline
是否用横跨箱体的线条标出中位数,默认不使用。
showcaps
表示是否显示箱体顶部和底部的横线,默认显示。
showbox
表示是否显示箱形图的箱体,默认显示。
showfliers
表示是否显示异常值,默认显示。
labels
表示箱形图的标签。
boxprops
表示控制箱体属性的字典。

绘制不显示异常值的箱形图

data = np.random.randn(100)
plt.boxplot(data, meanline=True,
            widths=0.3,
            patch_artist=True,
            showfliers=False)

2.8.2实例 8:2017 年和 2018 年全国发电量统计

实例 8

2017 年和 2018 年全国发电量统计

本实例要求根据下表的数据,将发电量(亿千瓦时)列的数据作为 x 轴的数据,将 2017 年和 2018 年作为 y 轴的刻度标签,使用 boxplot() 函数绘制箱形图。

表 2-7 2017 年和 2018 年全国发电量统计单位:亿千瓦·时

月份2018 年2017 年
1 月52004605.2
2 月5254.54710.3
3 月5283.45168.9
4 月5107.84767.2
5 月5443.34947
6 月5550.65203
7 月6400.26047.4
8 月6404.95945.5
9 月5483.15219.6
10 月5330.25038.1
11 月55435196.3
12 月6199.95698.6

图 2-29 全国发电量箱形图(箱体宽度 0.5、填充颜色、横向摆放、显示中位数与异常值)

由图可知,2017 年每月的发电量大多分布于 4800~5300 亿千瓦时范围内,2018 年每月的发电量大多分布于 5250~5700 亿千瓦时范围内。
2.9

绘制雷达图

雷达图把多个维度的数值映射到极坐标的各个方向上,便于比较综合特征。

2.9.1使用 polar() 绘制雷达图

使用 pyplot 的 polar() 函数可以快速地绘制雷达图。

语法

polar(theta, r, **kwargs)
theta
表示每个数据点所在射线与极径的夹角。
r
表示每个数据点到原点的距离。

2.9.2实例 9:霍兰德职业兴趣测试

实例 9

6 名用户霍兰德职业兴趣测试的结果

霍兰德职业兴趣测试是由美国职业指导专家霍兰德根据他本人大量的职业咨询经验及其职业类型理论编制的测评工具。根据个人兴趣的不同,霍兰德将人格分为研究型(I)、艺术型(A)、社会型(S)、企业型(E)、传统型(C)和现实型(R)6 个维度,将这 6 个维度不同程度的组合形成每个人的性格。本实例要求根据下表的数据,将标题一行的数据作为雷达图的标签,将其余行的数据作为雷达图的数据,使用 polar() 函数绘制雷达图。

表 2-8 6 名用户霍兰德职业兴趣测试的结果

研究型艺术型社会型企业型传统型现实型
用户 10.400.320.350.300.300.88
用户 20.850.350.300.400.400.30
用户 30.430.890.300.280.220.30
用户 40.300.250.480.850.450.40
用户 50.200.380.870.450.320.28
用户 60.340.310.380.400.920.28

图 2-32 6 名用户的霍兰德职业兴趣雷达图(研究型、艺术型、社会型、企业型、传统型、现实型)

由图可知,用户 1 偏向于现实型人格;用户 2 偏向于研究型人格;用户 3 偏向于艺术型人格;用户 4 偏向于企业型人格;用户 5 偏向于社会型人格;用户 6 偏向于传统型人格。
2.10

绘制误差棒图

误差棒图在数据点上叠加误差范围,用“数据 ± 偏差”的方式呈现不确定性。

2.10.1使用 errorbar() 绘制误差棒图

使用 pyplot 的 errorbar() 函数可以快速地绘制误差棒图。

语法

errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, *, data=None, **kwargs)
x,y
表示数据点的位置。
xerr,yerr
表示数据的误差范围。
fmt
表示数据点的标记样式和数据点之间连接线的样式。
elinewidth
表示误差棒的线条宽度。
capsize
表示误差棒边界横杆的大小。
capthick
表示误差棒边界横杆的厚度。

绘制误差棒图

x = np.arange(5)
y = (25, 32, 34, 20, 25)
y_offset = (3, 5, 2, 3, 3)
plt.errorbar(x, y, yerr=y_offset,
             capsize=3, capthick=2)

2.10.2实例 10:4 个树种不同季节的细根生物量

实例 10

4 个树种不同季节的细根生物量

细根生物量的多少反映了根系从土壤中吸收水分和养分的能力,是植物地下部分集汇能力的重要体现。不同树种细根生物量存在差异性,各树种细根生物量在不同季节间差异较为明显。本实例要求根据下表的数据,将季节列的数据作为 x 轴的刻度标签,将其他列的数据作为 y 轴的数据,使用 errorbar() 函数绘制误差棒图。

表 2-9 4 个树种不同季节的细根生物量单位:g

季节马尾松樟树杉木桂花
春季2.04±0.161.69±0.274.65±0.343.39±0.23
夏季1.57±0.081.61±0.144.99±0.322.33±0.23
秋季1.63±0.101.64±0.144.94±0.294.10±0.39

图 2-36 4 个树种不同季节细根生物量误差棒图(x 轴为季节,y 轴为细根生物量 g)

由图可知,杉木的细根生物量最多,说明杉木吸收水分和养分的能力最强;马尾松的细根生物量最少,说明马尾松吸收水分和养分的能力最弱。
2.11

Summary

本章小结

本章主要介绍了如何使用 matplotlib 库的绘图函数绘制简单的图表,包括折线图、柱形图或堆积柱形图、条形图或堆积条形图、堆积面积图、直方图、饼图或圆环图、散点图或气泡图、箱形图、雷达图、误差棒图。通过学习本章的内容,希望大家能够掌握绘图函数的用法,可以使用这些函数绘制简单的图表,为后续的学习打好扎实的基础。

  • plot()折线图
  • bar()柱形图
  • barh()条形图
  • stackplot()堆积面积图
  • hist()直方图
  • pie()饼图 / 圆环图
  • scatter()散点图 / 气泡图
  • boxplot()箱形图
  • polar()雷达图
  • errorbar()误差棒图