查看全课大纲(第 66 / 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.实战:通过移动设备行为数据预测性别和年龄
Matplotlib绘图基本介绍
约 9 分钟
小象实战讲义 · Python数据分析实战
在数据分析工作中,将数据转化为直观的图表是沟通洞察的关键环节。本节我们将系统学习Python生态中最经典、最基础的绘图库——Matplotlib。你将掌握其核心绘图逻辑、基本元素构成以及从数据到图表的完整步骤,为后续的探索性数据分析和复杂可视化打下坚实基础。
💡 核心导读
- Matplotlib定位:一个用于创建出版质量图表的绘图工具库,旨在为Python提供类似Matlab的绘图接口。
- 绘图五步法:从创建画布到添加修饰,遵循清晰的步骤即可完成图表绘制。
- 核心元素关系:理解
Figure(画布)、Axes(坐标系/轴)、Axis(坐标轴)之间的层级包含关系。 - 元素详解:认识图表中的
Title、Label、Tick、Tick Label等基本构成部件及其作用。
Matplotlib简介与绘图逻辑
Matplotlib是Python数据可视化生态的基石。它最初受Matlab的启发而设计,旨在为科学计算提供高质量的图形输出。通过其子模块pyplot,我们可以使用一套简洁的API(应用程序编程接口)来创建各种静态、交互式图表。
其核心优势在于与NumPy数组的无缝集成。Matplotlib的底层绘图函数大多直接操作NumPy数组,这使得向量化计算的结果能够高效地转换为图形元素。
在Python中使用Matplotlib的标准方式是导入pyplot模块,并约定俗成地将其简写为plt:
import matplotlib.pyplot as plt这个plt对象将成为我们调用绝大多数绘图函数的入口。
绘图步骤与基本元素
绘制一张完整的图表,可以遵循一个清晰的五步流程。这个过程类似于画家作画:
- 创建画布(Figure):首先需要一张“纸”,在Matplotlib中称为
Figure对象。它是所有图表元素的顶级容器。 - 创建绘图区域(Axes):在画布上划分出绘图区域,即坐标系(Axes)。一个画布可以包含多个子图(Subplot),每个子图都是一个独立的Axes对象。
- 绘制数据(Plot):在确定的坐标系中,调用具体的绘图函数(如
plot、scatter、bar)将数据绘制成点、线、柱状图等图形。 - 添加修饰(Decoration):为图表添加标题(Title)、坐标轴标签(Label)、图例(Legend)等,使图表含义一目了然。
- 定制化调整(DIY):根据展示需求进行细节调整,例如旋转刻度标签、调整颜色、设置网格线等,让图表更加美观和清晰。
这五个步骤对应了Matplotlib绘图的三个基本要素:数据(变量)、绘图函数以及承载它们的画布与坐标系(Figure & Axes)。绘图过程本质上是:数据通过绘图函数,在画布和坐标系的框架内,被可视化为图形,并通过修饰元素进行描述。
深入理解图表层级与元素
为了更精确地控制图表,我们需要理解Matplotlib中对象的层级关系:
- Figure(画布):最高层级容器,相当于整张画纸。一个
Figure可以包含一个或多个Axes。 - Axes(坐标系/轴域):即一个子图,是拥有坐标系统的绘图区域。它包含两个(2D图)或三个(3D图)
Axis对象,以及图形标题(title)、坐标轴标签(xlabel,ylabel)等。 - Axis(坐标轴):负责设置图形界限并生成刻度(Tick)和刻度标签(Tick Label)。
让我们通过一个简单的代码示例,来具象化这些概念,并演示完整的绘图流程。
import matplotlib
matplotlib.use('Agg') # 使用无界面后端,确保在任何环境都能运行
import matplotlib.pyplot as plt
import numpy as np
# 1. 创建画布(Figure)
fig = plt.figure(figsize=(8, 5)) # figsize设置画布宽高(英寸)
# 2. 在画布上创建坐标系(Axes)。这里我们创建一个1x1的子图网格,并选中第一个(也是唯一一个)Axes。
ax = fig.add_subplot(1, 1, 1)
# 3. 准备数据并绘制
x = np.array([0, 1, 2, 3, 4]) # X轴数据
y = np.array([10, 15, 13, 18, 16]) # Y轴数据
ax.plot(x, y, marker='o', linestyle='-', label='产品A销量') # 绘制折线图,带圆圈标记
# 4. 添加修饰
ax.set_title('2023年产品月度销量趋势') # 设置图表标题
ax.set_xlabel('月份') # 设置X轴标签
ax.set_ylabel('销量(万件)') # 设置Y轴标签
ax.legend() # 显示图例
ax.grid(True, linestyle='--', alpha=0.5) # 添加网格线
# 5. DIY:自定义X轴刻度标签
# 当前刻度是[0,1,2,3,4],我们将其替换为更有意义的月份名称
ax.set_xticks(x) # 设置刻度位置
ax.set_xticklabels(['一月', '二月', '三月', '四月', '五月']) # 设置刻度标签
# 在讲义中,我们通常不保存文件,此处仅作演示,读者可自行运行 fig.savefig('plot.png')
plt.close(fig) # 关闭图形,释放内存
print("图表元素设置完成。")
print(f"Figure 对象: {type(fig).__name__}")
print(f"Axes 对象: {type(ax).__name__}")
print(f"X轴刻度位置: {ax.get_xticks()}")
print(f"X轴刻度标签: {ax.get_xticklabels()}")图表元素设置完成。
Figure 对象: Figure
Axes 对象: Axes
X轴刻度位置: [0 1 2 3 4]
X轴刻度标签: [Text(0, 0, '一月'), Text(1, 0, '二月'), Text(2, 0, '三月'), Text(3, 0, '四月'), Text(4, 0, '五月')]通过上面的代码和输出,我们可以清晰地看到:
- 我们创建了
Figure和Axes对象。 - 在
Axes上绘制了数据折线。 - 设置了标题、坐标轴标签、图例和网格。
- 特别演示了DIY步骤:将原始的数值刻度
[0,1,2,3,4]通过set_xticklabels替换为['一月', '二月'...]。这里的原始数值就是刻度(Tick),替换后的中文月份就是刻度标签(Tick Label)。而坐标轴标签(xlabel)则是说明整个轴含义的“月份”。
核心绘图函数初探
了解了框架之后,让我们聚焦于第三步——使用不同的绘图函数来可视化数据。Matplotlib的pyplot模块(即plt)和Axes对象都提供了丰富的绘图方法。以下是一个综合示例,展示三种基础图表:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
# 自包含数据:模拟三种产品的季度销售额
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
product_a = [120, 135, 148, 160]
product_b = [90, 110, 105, 130]
product_c = [200, 185, 210, 195]
fig, axs = plt.subplots(1, 3, figsize=(15, 4)) # 创建1行3列的子图
# 子图1:折线图 (Line Plot) - 展示趋势
axs[0].plot(quarters, product_a, marker='s', label='产品A')
axs[0].plot(quarters, product_b, marker='^', label='产品B')
axs[0].plot(quarters, product_c, marker='o', label='产品C')
axs[0].set_title('季度销售趋势')
axs[0].set_xlabel('季度')
axs[0].set_ylabel('销售额(万元)')
axs[0].legend()
axs[0].grid(True)
# 子图2:柱状图 (Bar Chart) - 对比Q4数据
axs[1].bar(['产品A', '产品B', '产品C'], [product_a[-1], product_b[-1], product_c[-1]], color=['skyblue', 'lightgreen', 'salmon'])
axs[1].set_title('第四季度销售额对比')
axs[1].set_ylabel('销售额(万元)')
# 子图3:散点图 (Scatter Plot) - 观察A、B产品关联(模拟数据)
# 假设我们有多个月份的点
months = np.arange(12)
sales_a = np.array([10,12,11,13,15,14,16,18,17,19,20,22])
sales_b = np.array([8,9,8,10,11,10,12,13,12,14,15,16])
axs[2].scatter(sales_a, sales_b, alpha=0.6)
axs[2].set_title('产品A与产品B销量散点图')
axs[2].set_xlabel('产品A销量(万件)')
axs[2].set_ylabel('产品B销量(万件)')
axs[2].grid(True)
plt.tight_layout() # 自动调整子图间距
plt.close(fig)
print("多子图绘制完成,展示了折线图、柱状图和散点图。")多子图绘制完成,展示了折线图、柱状图和散点图。📝 动手练一练
- 概念辨析:在Matplotlib的层级结构中,
Figure、Axes和Axis三者之间是什么关系?请用一句话描述。
👉 点击查看参考答案
Figure(画布)是顶级容器,可以包含一个或多个Axes(坐标系);每个Axes包含两个(对于2D图)或三个Axis(坐标轴)对象来管理坐标刻度与界限。
- 动手修改:参考第一个代码示例,请修改代码,将折线图的线条样式改为虚线(
linestyle='--'),标记形状改为方块(marker='s'),并将线条颜色改为红色。同时,将Y轴标签改为“产量(万吨)”。
👉 点击查看参考答案
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(8,5)) # 更简洁的创建画布和坐标系的方式
x = np.array([0, 1, 2, 3, 4])
y = np.array([10, 15, 13, 18, 16])
# 修改后的绘图行
ax.plot(x, y, marker='s', linestyle='--', color='red', label='更新后的趋势线')
# 其余代码保持不变
ax.set_title('2023年产品月度产量趋势')
ax.set_xlabel('月份')
ax.set_ylabel('产量(万吨)') # 修改Y轴标签
ax.legend()
ax.grid(True, linestyle=':', alpha=0.5)
ax.set_xticks(x)
ax.set_xticklabels(['一月', '二月', '三月', '四月', '五月'])
plt.close(fig)
print("图表已按要求修改。")图表已按要求修改。本章小结
本节我们建立了对Matplotlib库的基本认知。我们学习了它作为Python基础绘图库的定位,掌握了从创建画布到输出成图的“五步绘图法”,并深入剖析了Figure、Axes、Axis等核心对象的层级关系与功能。最后,我们初步接触了折线图、柱状图和散点图等基础图形的绘制方法。
📋 行动清单
- 在你的Python环境中运行本节示例代码,确保理解每一行代码的作用。
- 尝试将“动手练一练”中的第二个练习独立完成,并运行验证。
- 思考你手头的一组数据(例如每周开销、项目进度),构思它适合用折线图、柱状图还是散点图来呈现。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载本节课件:Matplotlib绘图基本介绍PDF · 251KB
- 下载全套课件打包(第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 数据库