查看全课大纲(第 67 / 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画布

约 7 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在上一节中,我们了解了Matplotlib绘图的基本流程和元素。从本节开始,我们将正式学习如何使用Matplotlib进行绘图。一切绘图都始于一个承载图像的“画布”(Figure),这是Matplotlib最基础的元素。本节将带你掌握画布的创建、大小控制以及在Jupyter Notebook中的使用注意事项。

💡 核心导读

  • Figure对象:Matplotlib的所有图像都位于Figure对象中,它是绘图的顶层容器。
  • 画布创建:使用plt.figure()显式创建画布,养成良好编程习惯。
  • 画布大小:通过figsize参数(单位:英寸)控制画布尺寸。
  • 绘图三步法:创建画布 → 准备/生成数据 → 调用绘图函数并显示。
  • Jupyter使用注意:在Notebook中,创建画布和后续绘图代码应置于同一个Cell中,或通过变量传递Figure对象。

1. 理解Figure:绘图的画布

在Matplotlib中,Figure(画布) 是所有绘图元素的顶层容器。你可以将其想象为一张空白的画纸,后续的坐标轴、线条、点等都将绘制在这张“画纸”上。

创建画布最直接的方式是调用plt.figure()函数。

import matplotlib.pyplot as plt

# 创建一张画布
plt.figure()

运行上述代码,虽然你看不到任何图形(因为没有绘制内容),但一个Figure对象已经在后台被创建了。

一个重要的细节:即使你不显式调用plt.figure(),当你第一次调用如plt.plot()这样的绘图函数时,Matplotlib也会自动为你创建一个默认的画布。这是一种便利机制。然而,我们强烈建议你养成显式创建画布的习惯。这样做的好处是代码意图更清晰,并且可以方便地在创建时设置画布属性,例如大小。

2. 基础绘图三步走

有了画布,我们就可以进行绘图了。一个最简单的绘图流程可以分为三步:

  1. 创建画布 (plt.figure())
  2. 准备/生成数据
  3. 绘图并显示 (调用绘图函数,如plt.plot(),最后用plt.show()显示)

让我们通过一个具体例子来实践这个流程。

import matplotlib.pyplot as plt

# 第一步:创建画布
plt.figure()

# 第二步:准备数据
data = [2, 3, 6, 7, 11]  # 这代表Y轴的值

# 第三步:绘图并显示
plt.plot(data)  # 绘制折线图
plt.show()

执行这段代码,你会看到一条折线。这里有一个关键点需要理解:当我们只传入一个列表(如[2, 3, 6, 7, 11])给plt.plot()时,Matplotlib会将这些值视为Y轴的坐标。X轴的坐标则被自动设置为从0开始的整数序列 [0, 1, 2, 3, 4]。

因此,这条折线实际上连接了五个点:(0,2), (1,3), (2,6), (3,7), (4,11)。由于这些点并非严格在一条直线上,所以我们看到的是一条有起伏的折线。如果数据是[2, 4, 6, 8, 10],那么绘制的就是一条斜率为2的直线。

3. 控制画布大小

默认创建的画布大小是固定的。但在很多场景下,我们需要调整画布的尺寸以适应不同的展示需求,比如创建一个细长型的图表。

这可以通过plt.figure()的figsize参数来实现。figsize接受一个元组(width, height),单位是英寸(inch)(1英寸 = 2.54厘米)。

下面的例子将创建一个宽度为20英寸、高度为5英寸的“扁长”画布,并在上面绘制100个随机数据点。

import matplotlib.pyplot as plt
import numpy as np

# 设置随机种子,确保示例可复现(注意:仅用于演示,印刷时不依赖随机输出)
np.random.seed(42)

# 创建自定义大小的画布:宽度20英寸,高度5英寸
plt.figure(figsize=(20, 5))

# 生成100个随机数据点
random_data = np.random.randn(100)

# 绘制折线图
plt.plot(random_data)
plt.show()

运行后,你可以明显感受到画布形状的变化。通过调整figsize的两个数值,你可以轻松创建出正方形、长方形等各种比例的画布。

4. 在Jupyter Notebook中的注意事项

在Jupyter Notebook(或JupyterLab)中编写和运行Matplotlib代码时,有一个特殊的注意事项:创建画布的代码和后续在该画布上绘图的代码,必须放在同一个Cell中执行。

这是因为Jupyter中所有Cell共享同一个Python内核命名空间,代码并非”互不记忆”;真正的原因在渲染侧:Notebook 使用 inline 后端时,每个Cell执行结束会把当前图形渲染输出并”收走”它。因此若把两段代码拆到两个Cell:

  • Cell 1: plt.figure(figsize=(20, 5))
  • Cell 2: plt.plot([1,2,3]); plt.show()

那么Cell 1 执行结束时,inline 后端就会把这张画布渲染输出并关闭;等Cell 2 执行时,当前已经没有活动的画布,plt.plot 会自动创建一张新的默认大小的画布并在上面绘图。这就导致你设置的figsize=(20,5)没有生效。

正确的做法有两种:

  1. (推荐)将相关代码放在同一个Cell。
  2. 将plt.figure()返回的Figure对象赋值给一个变量(如fig = plt.figure(...)),然后在后续的Cell中将这个变量fig传递给特定的绘图函数或方法(这通常在使用面向对象接口时更常见)。对于初学者使用plt.plot()这种函数式接口,第一种方法更简单直接。

为了让你更清晰地看到问题现象,请看下面的对比演示:

# 演示:在Notebook中分开Cell执行的效果(模拟)
# 假设下面两个代码块分别在两个独立的Cell中

# Cell 1:仅创建画布
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 5))
print("Cell 1执行完毕:创建了一个 figsize=(20,5) 的画布。")
Cell 1执行完毕:创建了一个 figsize=(20,5) 的画布。
# Cell 2:尝试在“另一个Cell”中绘图
import matplotlib.pyplot as plt
import numpy as np

# 由于与Cell 1不在同一上下文,这里会使用默认画布
np.random.seed(42)
data = np.random.randn(100)
plt.plot(data)
plt.show()
print("Cell 2执行完毕:在默认大小的画布上完成了绘图。")
Cell 2执行完毕:在默认大小的画布上完成了绘图。

从输出提示可以看出,虽然我们在第一个Cell创建了特定大小的画布,但在第二个Cell绘图时,这个设置并没有被沿用。在实际的Notebook界面中,第二个Cell显示的图形将是默认尺寸,而非我们设定的(20, 5)。

📝 动手练一练

  1. 概念辨析:如果不调用plt.figure()直接使用plt.plot()绘图,会发生什么?Matplotlib是如何处理的?显式创建画布有什么好处?
👉 点击查看参考答案

如果不显式调用plt.figure(),当第一次调用plt.plot()等绘图函数时,Matplotlib会自动在后台创建一个默认大小和属性的Figure对象(画布)。这是一种“惰性创建”的便利机制。

显式创建画布(plt.figure())的好处包括:

  • 代码意图清晰:明确表明了“这里开始准备一张新图”。
  • 便于设置属性:可以在创建时一次性设置画布大小(figsize)、DPI(分辨率)、背景色等属性。
  • 更好的控制:在复杂的多图绘制场景中,显式创建和管理多个Figure对象是必须的。 因此,养成显式创建画布的习惯是良好的编程实践。
  1. 动手实践:请修改下面代码中的figsize参数,创建一个高度大于宽度的“瘦高型”画布(例如宽5英寸,高10英寸),并绘制数据[10, 8, 6, 4, 2, 0]的折线图。观察画布形状的变化。
👉 点击查看参考答案
import matplotlib.pyplot as plt

# 创建瘦高型画布:宽度5英寸,高度10英寸
plt.figure(figsize=(5, 10))

# 准备数据并绘图
data = [10, 8, 6, 4, 2, 0]
plt.plot(data)

plt.show()

运行代码后,你将看到一个高度约为宽度两倍的竖直矩形画布,折线图绘制在其中。通过调整figsize的两个数字,你可以控制画布呈现任何你想要的矩形比例。

本章小结

本节我们深入学习了Matplotlib绘图的基础——Figure(画布)。画布是所有可视化元素的容器,理解它是掌握Matplotlib的第一步。

📋 行动清单

学完本节,你可以立即:

  • 在任何绘图开始前,习惯性地使用 plt.figure() 显式创建画布。
  • 根据图表展示的需要,使用 figsize 参数(单位:英寸)调整画布的宽度和高度。
  • 在Jupyter Notebook中编码时,确保将创建画布和后续绘图命令放在同一个Cell中执行。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:Matplotlib画布
    PDF · 182KB
    下载
  • 全套课件打包(第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 数据库
    下载