学号 --
DATA VISUALIZATION

使用 matplotlib 绘制简单图表

第 2 章课程作业 · 依据教材《第2章 使用matplotlib绘制简单图表》中的表 2-1 至表 2-9 原始数据, 使用 ECharts 复现十种基础图表:折线图、柱形图、条形图、堆积面积图、直方图、饼图、 散点图、箱形图、雷达图与误差棒图。

10图表类型
10教材实例
9原始数据表
01掌握绘制折线图,绘制柱形图或堆积柱形图
02掌握绘制条形图或堆积条形图,绘制堆积面积图、直方图
03掌握绘制饼图或圆环图,绘制散点图或气泡图
04掌握绘制箱形图,绘制雷达图,绘制误差棒图
2.1

折线图

使用 pyplot 的 plot() 函数可快速绘制折线图。可选参数 fmt 以 '[color][marker][line]' 的形式定义颜色、点型与线型;函数返回包含 Line2D 对象的列表。

语 法

plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None, *args, **kwargs)
# 实例1:未来15天最高气温和最低气温
plt.plot(x, y_max)   # 最高气温
plt.plot(x, y_min)   # 最低气温
plt.show()

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

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

将日期列作为 x 轴数据,最高气温与最低气温两列作为 y 轴数据。

2.2

柱形图 / 堆积柱形图

使用 bar() 函数绘制柱形图,返回 BarContainer 对象;通过 bottom 参数可绘制堆积柱形图, 通过 xerr、yerr 参数可为柱形添加误差棒。

语 法

bar(x, height, width=0.8, bottom=None, align='center', tick_label=None, xerr=None, yerr=None, **kwargs)
# 实例2:柱形宽度 0.5
plt.bar(x, gmv, tick_label=fiscal_year,
        width=0.5)

数据来源:表 2-2 2013—2019财年淘宝和天猫平台的 GMV(单位:亿元)

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

财年列作为 x 轴数据,GMV 列作为 y 轴数据,柱形宽度为 0.5。

2.3

条形图 / 堆积条形图

使用 barh() 函数绘制条形图,通过 left 参数可绘制堆积条形图, 通过 xerr、yerr 参数可为条形添加误差棒。

语 法

barh(y, width, height=0.8, left=None, align='center', *, **kwargs)
# 实例3:条形高度 0.6
plt.barh(y, rate, tick_label=kinds,
         height=0.6)

数据来源:表 2-3 各商品种类的网购替代率(部分),替代率已换算为 0~1 的比例

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

商品种类作为 y 轴刻度标签,替代率作为 x 轴数据,条形高度为 0.6。

2.4

堆积面积图

使用 stackplot() 函数绘制堆积面积图,多个序列自下而上堆叠,可直观呈现总量与各部分构成的变化。

语 法

stackplot(x, y, labels=(), baseline='zero', data=None, *args, **kwargs)
# 实例4:三家物流公司的物流费用
plt.stackplot(month, A, B, C,
              labels=['A公司', 'B公司', 'C公司'])

数据来源:表 2-4 A、B、C 物流公司物流费用统计(单位:万元)

实例 4 · 物流公司物流费用统计

月份作为 x 轴刻度标签,A、B、C 三家公司费用作为 y 轴数据堆叠展示。

2.5

直方图

使用 hist() 函数绘制直方图,bins 指定矩形条数量,用于观察数据的分布规律(如正态分布形态)。

语 法

hist(x, bins=None, range=None, density=None, weights=None, bottom=None, **kwargs)
# 实例5:10000个随机数作为灰度值
random_state = np.random.RandomState(19680801)
radom_x = random_state.randn(10000)
# 绘制包含25个矩形条的直方图
plt.hist(radom_x, bins=25)

数据来源:教材实例5,RandomState(19680801).randn(10000),bins=25;网页端用同种子伪随机数复现同一分布

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

以一组 10000 个随机数作为人脸图像的灰度值,绘制包含 25 个矩形条的直方图。

2.6

饼图 / 圆环图

使用 pie() 函数绘制饼图或圆环图:explode 使扇区离开圆心,autopct 显示百分比, startangle 设置起始角度,shadow 显示阴影,wedgeprops 可绘制圆环图。

语 法

pie(x, explode=None, labels=None, autopct=None, pctdistance=0.6, startangle=None, shadow=False, *, data=None)
# 实例6:起始角度90,占比最大分类离开圆心0.1
plt.pie(amount, labels=kinds, explode=explode,
        autopct='%3.1f%%', startangle=90,
        shadow=True)

数据来源:表 2-5 用户A某月使用支付宝的消费明细(单位:元,总支出 3000 元)

实例 6 · 支付宝月账单报告

分类列作为饼图标签,各分类金额与总支出金额的比例作为饼图数据;起始角度 90°,显示阴影。

2.7

散点图 / 气泡图

使用 scatter() 函数绘制散点图或气泡图:s 控制点大小(气泡图),c 控制颜色, cmap 指定颜色映射。车速增加 1 倍,制动距离将增大至近 4 倍。

语 法

scatter(x, y, s=None, c=None, marker=None, cmap=None, linewidths=None, edgecolors=None, *, **kwargs)
# 实例7:车速与制动距离
plt.scatter(speed, distance, s=60)

数据来源:表 2-6 车速与制动距离的关系(车速 km/h,制动距离 m)

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

车速列作为 x 轴数据,制动距离列作为 y 轴数据。

2.8

箱形图

使用 boxplot() 函数绘制箱形图,展示四分位数、中位数与异常值;vert=False 横向摆放, widths 设置箱体宽度,patch_artist 填充颜色,showfliers 控制异常值显示。

语 法

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, *, data=None)
# 实例8:横向摆放,箱体宽度0.5,显示中位数与异常值
plt.boxplot([g2017, g2018], vert=False, widths=0.5,
            patch_artist=True, showmeans=True,
            showfliers=True)

数据来源:表 2-7 2017年和2018年全国发电量统计(单位:亿千瓦·时)

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

发电量作为 x 轴数据,2017 年、2018 年作为 y 轴刻度标签;横向摆放,箱体宽度 0.5。

2.9

雷达图

使用 polar() 函数绘制雷达图:theta 为角度(弧度制),r 为该角度对应的半径; 绘制多条闭合曲线即可对比多位用户的多维特征。

语 法

polar(theta, r, **kwargs)
# 实例9:霍兰德职业兴趣测试,6个维度
theta = np.linspace(0, 2*np.pi, 6, endpoint=False)
theta = np.concatenate((theta, [theta[0]]))  # 首尾闭合
plt.polar(theta, scores)

数据来源:表 2-8 6名用户霍兰德职业兴趣测试的结果(研究型/艺术型/社会型/企业型/传统型/现实型)

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

标题一行的 6 个维度作为雷达图标签,其余 6 行作为 6 位用户的测试数据。

2.10

误差棒图

使用 errorbar() 函数绘制误差棒图:yerr / xerr 指定误差范围, capsize 设置误差棒横杠宽度,capthick 设置横杠厚度。

语 法

errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, *, data=None, **kwargs)
# 实例10:4个树种不同季节的细根生物量
plt.errorbar(x, y, yerr=err, capsize=3,
             capthick=2)

数据来源:表 2-9 4个树种不同季节的细根生物量(单位:g,均值±标准差)

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

季节作为 x 轴刻度标签,4 个树种的数据作为 y 轴数据,并绘制误差棒。

本章小结

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

CHAPTER 02 · 数据可视化课程作业