查看全课大纲(第 66 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 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对象将成为我们调用绝大多数绘图函数的入口。

绘图步骤与基本元素

绘制一张完整的图表,可以遵循一个清晰的五步流程。这个过程类似于画家作画:

  1. 创建画布(Figure):首先需要一张“纸”,在Matplotlib中称为Figure对象。它是所有图表元素的顶级容器。
  2. 创建绘图区域(Axes):在画布上划分出绘图区域,即坐标系(Axes)。一个画布可以包含多个子图(Subplot),每个子图都是一个独立的Axes对象。
  3. 绘制数据(Plot):在确定的坐标系中,调用具体的绘图函数(如plot、scatter、bar)将数据绘制成点、线、柱状图等图形。
  4. 添加修饰(Decoration):为图表添加标题(Title)、坐标轴标签(Label)、图例(Legend)等,使图表含义一目了然。
  5. 定制化调整(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("多子图绘制完成,展示了折线图、柱状图和散点图。")
多子图绘制完成,展示了折线图、柱状图和散点图。

📝 动手练一练

  1. 概念辨析:在Matplotlib的层级结构中,Figure、Axes和Axis三者之间是什么关系?请用一句话描述。
👉 点击查看参考答案

Figure(画布)是顶级容器,可以包含一个或多个Axes(坐标系);每个Axes包含两个(对于2D图)或三个Axis(坐标轴)对象来管理坐标刻度与界限。

  1. 动手修改:参考第一个代码示例,请修改代码,将折线图的线条样式改为虚线(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 数据库
    下载