查看全课大纲(第 39 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
Figure 是什么,如何设置图形尺寸?
约 4 分钟
小象实战讲义 · Python 编程从入门到实践
在上一节我们导入了 Matplotlib,迈出了数据可视化的第一步。这一节,我们将深入 Matplotlib 绘图的核心概念——Figure(图形)。理解 Figure 是绘制任何图表的基础,它就像一个画板,决定了图表的整体框架和尺寸。学完本节,你将能创建一个指定大小的画板,并理解其在多图绘制中的核心作用。
💡 核心导读
- Figure 是绘图的总容器:它代表整个绘图窗口或画板,是所有图表元素的最外层载体。
- 一个 Figure 可包含多个子图:在 Figure 内部,可以划分并绘制多个独立的图表(子图)。
- 关键属性
figsize:通过figsize参数可以精确控制 Figure 的宽度和高度(单位为英寸)。 - 基本绘图流程:创建 Figure → 在 Figure 上绘图(或添加子图)→ 显示出图形。
理解 Figure:绘图的画板
在 Matplotlib 中,Figure(图形) 是一个最顶层的容器,它代表了整个绘图窗口或画板。你可以把它想象成画家作画时用的画板。
- 是什么:Figure 是 Matplotlib 绘图体系中的最大单位,一个 Figure 对象就对应一张最终的输出图片。
- 与子图的关系:一个 Figure 内部可以包含一个或多个绘图区域,这些区域被称为 Axes(轴域),通常也对应着我们常说的 子图(Subplot)。你可以在一张画板(Figure)上只画一幅大图,也可以将其划分成多个小格子,在每个格子里画不同的图。
这种层级关系是:Figure(画板) → Axes(子图/绘图区域) → 具体的图表元素(如线条、坐标轴、标题等)。
创建 Figure 并设置尺寸
在 Matplotlib 中,最常用的创建 Figure 的方法是使用 plt.figure() 函数。其中,控制图形大小的关键参数是 figsize。
figsize参数:接受一个元组(width, height),用于设置图形的宽度和高度,单位是英寸。例如,figsize=(8, 6)表示创建一个宽 8 英寸、高 6 英寸的画板。- 怎么用:在调用任何绘图函数(如
plt.plot())之前,先调用plt.figure(figsize=(宽, 高))来创建并设置画板。
下面我们通过一个例子来演示。我们将创建一些简单的数据,并在不同尺寸的画板上绘制图形。
import matplotlib
matplotlib.use("Agg") # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np
# 生成数据:在-3到3之间生成50个等间距的点
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1 # 线性函数
y2 = x ** 2 # 二次函数
# 1. 创建一个尺寸为 5x5 英寸的画板
plt.figure(figsize=(5, 5))
# 绘图:先绘制二次函数,再在同一画板上绘制线性函数
plt.plot(x, y2)
plt.plot(x, y1)
# 本讲义使用 Agg 无头后端,绘图命令执行后不会弹窗,图形对象仍保存在当前 Figure 中
print("已创建并绘制一个 5x5 英寸的图形。")已创建并绘制一个 5x5 英寸的图形。探索不同尺寸的效果
figsize 的值直接影响最终输出图像的大小和长宽比。通过修改它,我们可以让图形更适合展示或印刷。
import matplotlib
matplotlib.use("Agg") # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np
# 使用相同的数据
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
# 2. 创建一个更大的正方形画板 (10x10英寸)
plt.figure(figsize=(10, 10))
plt.plot(x, y2)
plt.plot(x, y1)
print("已创建并绘制一个 10x10 英寸的图形(更大)。")已创建并绘制一个 10x10 英寸的图形(更大)。import matplotlib
matplotlib.use("Agg") # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
# 3. 创建一个长方形的画板 (5x10英寸)
plt.figure(figsize=(5, 10)) # 宽5英寸,高10英寸
plt.plot(x, y2)
plt.plot(x, y1)
print("已创建并绘制一个 5x10 英寸的图形(长方形)。")已创建并绘制一个 5x10 英寸的图形(长方形)。对比观察:运行以上代码(在支持图形显示的环境中),你会发现三个图形的尺寸明显不同。figsize=(10,10) 的图形最大,figsize=(5,5) 的图形较小且是正方形,而 figsize=(5,10) 的图形则是一个瘦高的长方形。这说明了 figsize 如何直接控制图形的外观比例。
📝 动手练一练
请你尝试修改 figsize 的参数,创建一个宽 12 英寸、高 4 英寸的图形,并在其中绘制 y = x² 在 [-3, 3] 区间内的曲线。
👉 点击查看参考答案
思路:首先需要生成 x 和 y 的数据。使用 np.linspace 在 -3 到 3 之间生成足够多的点,然后计算每个点的平方值。接着,使用 plt.figure(figsize=(12, 4)) 创建指定尺寸的画板,最后用 plt.plot 绘制。
import matplotlib
matplotlib.use("Agg") # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np
# 生成数据:-3 到 3 之间取 200 个点
x = np.linspace(-3, 3, 200)
y = x ** 2
# 创建指定尺寸的画板
plt.figure(figsize=(12, 4))
# 绘制抛物线
plt.plot(x, y)
print("已创建 12x4 英寸的抛物线图形。")已创建 12x4 英寸的抛物线图形。常见错误
在创建和使用 Figure 时,初学者可能会遇到以下问题:
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
plt.figure(figsize=5, 5) | SyntaxError: positional argument follows keyword argument 或类似语法错误。 | figsize 参数需要接收一个元组 (宽, 高)。直接写两个数字会被解释为两个独立的参数。 | plt.figure(figsize=(5, 5)) |
先 plt.plot(),后 plt.figure() | 图形可能绘制在默认大小的画板上,而非自定义大小的画板上。 | plt.figure() 用于创建新的画板。如果在绘图后调用,会新建一个空白画板,之前的图留在旧的(默认)画板里。 | 确保 plt.figure(figsize=...) 在所有绘图命令之前调用。 |
plt.figure(figsize=('10', '5')) | TypeError: ufunc 'isfinite' not supported for the input types | figsize 的参数应为数字(整数或浮点数),代表英寸。传入字符串会导致类型错误或无法识别。 | plt.figure(figsize=(10.0, 5.0)) 或 plt.figure(figsize=(10, 5)) |
小结
- Figure(图形) 是 Matplotlib 绘图的最顶层容器,相当于画板。
- 使用
plt.figure()函数可以创建一个新的 Figure。 - 通过
figsize=(width, height)参数可以设置 Figure 的尺寸(单位:英寸),它控制最终输出图片的大小和比例。 - 一个 Figure 中可以包含多个子图(Axes),这是组织复杂图表的基础。
- 标准的绘图流程是:创建并设置 Figure → 在 Figure 上添加子图或直接绘图 → 显示图形。
📋 行动清单
- 将示例代码中的
figsize改为(8, 2)和(2, 8)并运行,直观感受长宽比对图形显示区域的影响。 - 尝试不写
plt.figure(figsize=...)这一行,直接绘图,观察生成的图形尺寸(这是默认尺寸)。 - 思考:如果想在一张画板上并排绘制两个曲线图,应该怎么做?(提示:这涉及到子图的概念,我们将在后续章节学习。)
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第5章代码包:figure(含1 个 Notebook)ZIP · 598B