查看全课大纲(第 70 / 101 节)
- 1.数据分析基本概念
- 2.学习数据分析的一般路线
- 3.数据分析的流程
- 4.数据类型
- 5.环境部署(1)
- 6.环境部署(2)
- 7.课程介绍
- 8.TXT文件操作
- 9.JSON文件操作
- 10.CSV文件操作
- 11.Excel文件操作
- 12.数据库及SQL常用语法
- 13.数据库基本操作
- 14.数据库多表连接
- 15.实战:欧洲职业足球数据库分析
- 16.爬虫简介
- 17.URL管理模块
- 18.网页下载模块
- 19.网页解析模块(1)
- 20.网页解析模块(2)
- 21.Scrapy简介
- 22.Scrapy使用步骤(1)
- 23.Scrapy使用步骤(2)
- 24.Scrapy使用步骤(3)
- 25.Scrapy使用步骤(4)
- 26.实战:获取国内城市空气质量指数数据
- 27.NumPy和SciPy介绍
- 28.多维数组
- 29.多维数组操作
- 30.NumPy的常用方法
- 31.向量化介绍
- 32.向量化及通用函数
- 33.实战:2016美国大选分析
- 34.数据结构-Series
- 35.数据结构-DataFrame
- 36.数据结构-Index
- 37.Series的索引操作
- 38.DataFrame的索引操作
- 39.索引操作总结
- 40.运算与对齐
- 41.函数应用操作(1) -- map
- 42.函数应用操作 (2) -- apply applymap
- 43.文件读写操作
- 44.排序操作
- 45.数据清洗--处理缺失数据
- 46.数据清洗--处理重复数据
- 47.数据清洗--替换数据
- 48.常用统计方法(1) -- describe quantile
- 49.常用统计方法(2) -- sum mean median count
- 50.常用统计方法(3) -- max min idxmax idxmin
- 51.常用统计方法(4) -- mad var std cumsum
- 52.实战:全球食品数据分析
- 53.层级索引
- 54.分组与聚合介绍
- 55.分组操作(1) -- GroupBy对象及常用聚合操作
- 56.分组操作(2) -- 自定义分组及聚合操作
- 57.透视表介绍
- 58.透视表操作
- 59.数据规整(1) -- 数据合并concat
- 60.数据规整(2) -- 数据连接merge
- 61.数据重构(3) -- 数据重构stack unstack
- 62.实战:互联网电影资料库分析
- 63.探索性数据分析EDA介绍
- 64.EDA的目的
- 65.EDA常用工具
- 66.Matplotlib绘图基本介绍
- 67.Matplotlib画布
- 68.散点图和柱状图的绘制
- 69.直方图的绘制
- 70.矩阵绘图
- 71.子图的使用
- 72.Matplotlib颜色、标记、线型
- 73.Matplotlib坐标刻度、标签、图例、标题
- 74.Seaborn介绍
- 75.数据集分布可视化(1) -- 单变量分布、双变量分布
- 76.数据集分布可视化(2) -- 变量关系可视化
- 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
- 78.交互式数据可视化工具Bokeh介绍
- 79.Bokeh绘制散点图、柱状图、盒子图、弦图
- 80.Bokeh绘制常用图形元素
- 81.3D绘图 -- mplot3d
- 82.3D曲线可视化
- 83.3D散点图可视化
- 84.3D柱状图可视化
- 85.Pandas绘图
- 86.实战:Lending Club借贷数据探索性分析及可视化
- 87.机器学习介绍及应用场景
- 88.机器学习建模介绍 (1) -- 分类
- 89.机器学习建模介绍 (2) -- 回归
- 90.机器学习建模介绍 (3) -- 聚类
- 91.机器学习分类
- 92.机器学习工具scikit-learn
- 93.使用scikit-learn的流程
- 94.数据集准备及划分
- 95.模型选择
- 96.数据预处理及特征工程
- 97.过拟合与欠拟合
- 98.模型调参介绍
- 99.模型调参方法
- 100.模型测试及评价
- 101.实战:通过移动设备行为数据预测性别和年龄
矩阵绘图
约 7 分钟
小象实战讲义 · Python数据分析实战
在数据分析中,我们常常需要观察和理解二维表格(矩阵)数据中数值的分布和模式。矩阵绘图,特别是热力图(Heatmap),通过将矩阵中的数值映射为颜色,为我们提供了一种直观的可视化方式,能够在一个平面上同时展示三个维度的信息:行、列以及单元格的值。本节将学习如何使用Matplotlib的imshow函数绘制热力图,并掌握颜色主题的配置方法。
💡 核心导读
- 热力图(Heatmap):一种将矩阵数据可视化为颜色块的图表,用于揭示数据中的模式、关联和异常。
plt.imshow():Matplotlib中用于显示图像或矩阵数据的主要函数,可将其数值映射到颜色。- 颜色映射(Colormap):定义了数值到颜色转换规则的集合,不同的
cmap参数可以改变热力图的视觉风格和含义。 - 颜色条(Colorbar):热力图的“图例”,通过颜色条可以解读图中颜色对应的具体数值范围。
1. 什么是矩阵绘图(热力图)
矩阵绘图,通常被称为热力图(Heatmap),是一种将二维矩阵或表格数据可视化的有效方法。它将矩阵中的每个数值映射到一个颜色,从而将抽象的数字矩阵转化为直观的彩色图像。
热力图的核心价值在于它能同时呈现三个维度的信息:
- X轴(横轴):通常代表数据的列,如时间序列中的年份。
- Y轴(纵轴):通常代表数据的行,如时间序列中的月份。
- 颜色(Z值):代表矩阵中对应位置(行,列)的数值大小,如乘客数量、温度、销售额等。
通过观察颜色的深浅或色调变化,我们可以快速识别出数据中的高点、低点、趋势和集群模式。例如,在分析“年份-月份-乘客数量”数据时,热力图能让我们一眼看出哪一年、哪几个月的客流量最大(颜色最亮或最深,取决于颜色映射)。
2. 使用 plt.imshow() 绘制基础热力图
Matplotlib库提供了plt.imshow()函数来绘制热力图。其基本用法是传入一个二维数组(矩阵)数据。
# 引入必要的库
import matplotlib.pyplot as plt
import numpy as np
# 使用非交互式后端,确保代码在任何环境下都能运行
plt.switch_backend('Agg')
# 构造一个简单的模拟矩阵数据(10行代表10个年份,12列代表12个月份)
# 注意:为保持输出确定性,我们使用硬编码的列表创建数据
data_list = [
[112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118],
[115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140],
[145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166],
[171, 180, 193, 181, 183, 218, 230, 242, 209, 191, 172, 194],
[196, 196, 236, 235, 229, 243, 264, 272, 237, 211, 180, 201],
[204, 188, 235, 227, 234, 264, 302, 293, 259, 229, 203, 229],
[242, 233, 267, 269, 270, 315, 364, 347, 312, 274, 237, 278],
[284, 277, 317, 313, 318, 374, 413, 405, 355, 306, 271, 306],
[315, 301, 356, 348, 355, 422, 465, 467, 404, 347, 305, 336],
[340, 318, 362, 348, 363, 435, 491, 505, 404, 359, 310, 337]
]
data_matrix = np.array(data_list, dtype=np.float64)
print("模拟的乘客数量矩阵(10年 x 12月):")
print(data_matrix)
print(f"矩阵形状: {data_matrix.shape}")模拟的乘客数量矩阵(10年 x 12月):
[[112. 118. 132. 129. 121. 135. 148. 148. 136. 119. 104. 118.]
[115. 126. 141. 135. 125. 149. 170. 170. 158. 133. 114. 140.]
[145. 150. 178. 163. 172. 178. 199. 199. 184. 162. 146. 166.]
[171. 180. 193. 181. 183. 218. 230. 242. 209. 191. 172. 194.]
[196. 196. 236. 235. 229. 243. 264. 272. 237. 211. 180. 201.]
[204. 188. 235. 227. 234. 264. 302. 293. 259. 229. 203. 229.]
[242. 233. 267. 269. 270. 315. 364. 347. 312. 274. 237. 278.]
[284. 277. 317. 313. 318. 374. 413. 405. 355. 306. 271. 306.]
[315. 301. 356. 348. 355. 422. 465. 467. 404. 347. 305. 336.]
[340. 318. 362. 348. 363. 435. 491. 505. 404. 359. 310. 337.]]
矩阵形状: (10, 12)接下来,我们使用plt.imshow()来可视化这个矩阵。默认的颜色映射是’viridis’。
# 引入必要的库并设置后端
import matplotlib.pyplot as plt
import numpy as np
plt.switch_backend('Agg')
# 重新构造相同的确定性数据
data_list = [
[112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118],
[115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140],
[145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166],
[171, 180, 193, 181, 183, 218, 230, 242, 209, 191, 172, 194],
[196, 196, 236, 235, 229, 243, 264, 272, 237, 211, 180, 201],
[204, 188, 235, 227, 234, 264, 302, 293, 259, 229, 203, 229],
[242, 233, 267, 269, 270, 315, 364, 347, 312, 274, 237, 278],
[284, 277, 317, 313, 318, 374, 413, 405, 355, 306, 271, 306],
[315, 301, 356, 348, 355, 422, 465, 467, 404, 347, 305, 336],
[340, 318, 362, 348, 363, 435, 491, 505, 404, 359, 310, 337]
]
data_matrix = np.array(data_list, dtype=np.float64)
# 绘制基础热力图(不带颜色条)
plt.figure(figsize=(8, 6))
plt.imshow(data_matrix) # 核心绘图函数
plt.title('基础热力图(未添加颜色条)')
plt.xlabel('月份索引 (0-11)')
plt.ylabel('年份索引 (0-9)')
plt.tight_layout()
# 在实际环境中可以使用 plt.show(),此处为讲义演示,我们关闭图形
plt.close()运行上述代码会生成一个彩色图像,但我们无法确切知道黄色、绿色、蓝色分别对应多大的数值。这就需要引入颜色条。
3. 添加颜色条与解读
颜色条(Colorbar)是热力图的必备组件,它提供了颜色到数值的映射参考。使用plt.colorbar()函数可以轻松添加。
# 引入必要的库并设置后端
import matplotlib.pyplot as plt
import numpy as np
plt.switch_backend('Agg')
# 重新构造相同的确定性数据
data_list = [
[112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118],
[115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140],
[145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166],
[171, 180, 193, 181, 183, 218, 230, 242, 209, 191, 172, 194],
[196, 196, 236, 235, 229, 243, 264, 272, 237, 211, 180, 201],
[204, 188, 235, 227, 234, 264, 302, 293, 259, 229, 203, 229],
[242, 233, 267, 269, 270, 315, 364, 347, 312, 274, 237, 278],
[284, 277, 317, 313, 318, 374, 413, 405, 355, 306, 271, 306],
[315, 301, 356, 348, 355, 422, 465, 467, 404, 347, 305, 336],
[340, 318, 362, 348, 363, 435, 491, 505, 404, 359, 310, 337]
]
data_matrix = np.array(data_list, dtype=np.float64)
# 绘制带颜色条的热力图
plt.figure(figsize=(9, 6))
img = plt.imshow(data_matrix) # 保存imshow返回的对象
plt.title('年份-月份乘客数量热力图(模拟数据)')
plt.xlabel('月份索引 (0-11代表1-12月)')
plt.ylabel('年份索引 (0-9代表连续10年)')
# 添加颜色条,并为其设置标签
cbar = plt.colorbar(img, label='乘客数量(模拟值)')
plt.tight_layout()
# 在实际环境中可以使用 plt.show(),此处为讲义演示,我们关闭图形
plt.close()
print("热力图已生成,并添加了颜色条。")
print("观察颜色条可知:颜色越偏向黄色,乘客数量越多;颜色越偏向深紫色,乘客数量越少。")热力图已生成,并添加了颜色条。
观察颜色条可知:颜色越偏向黄色,乘客数量越多;颜色越偏向深紫色,乘客数量越少。现在,通过颜色条我们可以清晰地解读图像:在模拟数据中,右下角区域(对应后期年份的夏季月份)颜色最亮(黄),表示乘客数量最多;左上角区域颜色较深(紫),表示乘客数量较少。这直观地展示了乘客数量随时间(年份)和季节(月份)的增长趋势。
4. 探索不同的颜色映射主题
Matplotlib提供了丰富的颜色映射(Colormap)主题,适用于不同的数据和场景(如顺序数据、发散数据)。通过imshow()的cmap参数可以指定颜色主题。
# 引入必要的库并设置后端
import matplotlib.pyplot as plt
import numpy as np
plt.switch_backend('Agg')
# 重新构造相同的确定性数据(小规模,便于演示)
demo_matrix = np.array([
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
], dtype=np.float64)
# 尝试三种不同的颜色主题
fig, axes = plt.subplots(1, 3, figsize=(12, 3.5))
# 1. 使用 'gnuplot' 主题(紫-黄)
im0 = axes[0].imshow(demo_matrix, cmap='gnuplot')
axes[0].set_title("cmap: 'gnuplot'")
fig.colorbar(im0, ax=axes[0])
# 2. 使用 'ocean' 主题(深蓝-浅蓝)
im1 = axes[1].imshow(demo_matrix, cmap='ocean')
axes[1].set_title("cmap: 'ocean'")
fig.colorbar(im1, ax=axes[1])
# 3. 使用 'hot' 主题(黑-红-黄)
im2 = axes[2].imshow(demo_matrix, cmap='hot')
axes[2].set_title("cmap: 'hot'")
fig.colorbar(im2, ax=axes[2])
plt.tight_layout()
# 在实际环境中可以使用 plt.show(),此处为讲义演示,我们关闭图形
plt.close()
print("演示了三种颜色映射主题:'gnuplot', 'ocean', 'hot'。")
print("可以通过 plt.cm.<name> 或字符串名称(如 'viridis', 'plasma', 'coolwarm')来指定cmap。")演示了三种颜色映射主题:'gnuplot', 'ocean', 'hot'。
可以通过 plt.cm.<name> 或字符串名称(如 'viridis', 'plasma', 'coolwarm')来指定cmap。选择合适的颜色映射非常重要。例如:
'viridis'(默认):感知均匀,对色盲友好,适合表示顺序数据。'coolwarm':发散色系,适合显示有正负或相对于中心值偏差的数据。'hot':黑色到亮黄色,能很好地突出高值区域。
📝 动手练一练
- 概念辨析:热力图(Heatmap)主要用来可视化什么类型的数据结构?它能同时展示几个维度的信息?请举例说明。
👉 点击查看参考答案
热力图主要用于可视化二维矩阵或表格数据。它能同时展示三个维度的信息:
- X轴维度:通常代表列标签(如不同的年份、产品类别)。
- Y轴维度:通常代表行标签(如不同的月份、地区)。
- 颜色维度(Z值):代表矩阵中对应(行,列)位置的数值(如销售额、温度、相关系数)。
例如,一个“城市-月份-平均气温”的数据表,用热力图画出来,X轴是1月到12月,Y轴是北京、上海、广州等城市,颜色深浅代表温度高低,一眼就能看出哪个城市在哪个季节最热或最冷。
- 动手实践:假设你有一个3x4的矩阵,代表三个部门(A, B, C)在四个季度(Q1, Q2, Q3, Q4)的业绩得分(分数范围1-10)。请用热力图将其可视化,并为X轴和Y轴设置正确的刻度标签(部门名和季度名),而不是默认的数字索引。提示:使用
plt.xticks()和plt.yticks()函数。
👉 点击查看参考答案
import matplotlib.pyplot as plt
import numpy as np
plt.switch_backend('Agg')
# 构造业绩得分矩阵
performance = np.array([
[8, 7, 9, 6], # 部门A
[5, 8, 7, 9], # 部门B
[9, 6, 8, 10] # 部门C
])
# 定义刻度标签
departments = ['Dept A', 'Dept B', 'Dept C']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
plt.figure(figsize=(6, 4))
img = plt.imshow(performance, cmap='YlOrRd') # 使用黄-橙-红色系
plt.colorbar(img, label='业绩得分')
# 设置刻度位置和标签
plt.xticks(range(len(quarters)), quarters)
plt.yticks(range(len(departments)), departments)
plt.title('部门季度业绩热力图')
plt.tight_layout()
plt.close()
print("热力图已创建,X轴标签为季度,Y轴标签为部门。")热力图已创建,X轴标签为季度,Y轴标签为部门。从图中可以直观比较不同部门在不同季度的表现。
本章小结
本节我们学习了数据可视化中一个强大的工具——矩阵绘图(热力图)。热力图通过颜色编码,将二维数据矩阵转化为直观的图像,非常适合用于观察数据的分布、模式、相关性以及识别异常值。
📋 行动清单
- 掌握核心函数:熟练使用
plt.imshow(matrix)绘制基础热力图。 - 必备颜色条:牢记绘制热力图后,务必使用
plt.colorbar()添加颜色条,否则图像无法解读。 - 尝试不同主题:根据你的数据特性(顺序、发散),在
Matplotlib官方色彩映射中选择合适的cmap参数,例如'viridis','plasma','coolwarm'。 - 优化图表可读性:使用
plt.xticks()和plt.yticks()将坐标轴上的数字索引替换为有意义的文本标签(如年份、月份、类别名称)。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载本节课件:矩阵绘图PDF · 190KB
- 下载全套课件打包(第1-5章)ZIP · 12.8MB
- 下载全套课件打包(第6-8章)ZIP · 15MB
- 下载实战数据集:AppleStore 应用商城分析ZIP · 329KB
- 下载实战数据集:女性服装电商分析ZIP · 2.8MB
- 下载Python 数据分析环境搭建指南PDF · 2MB
- 下载Scrapy 安装教程PDF · 12.7MB
- 下载附加实战项目:AppleStore 应用商城数据分析ZIP · 0.3MB · ipynb + CSV 数据
- 下载附加实战项目:银行电话营销数据分析ZIP · 0.4MB · ipynb + CSV 数据
- 下载附加实战项目:女性服装电商评论数据分析ZIP · 2.7MB · ipynb + CSV 数据
- 下载附加实战项目:美国化学学会杂志数据分析ZIP · 34.2MB · ipynb + SQLite 数据库