查看全课大纲(第 39 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 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 typesfigsize 的参数应为数字(整数或浮点数),代表英寸。传入字符串会导致类型错误或无法识别。plt.figure(figsize=(10.0, 5.0)) 或 plt.figure(figsize=(10, 5))

小结

  1. Figure(图形) 是 Matplotlib 绘图的最顶层容器,相当于画板。
  2. 使用 plt.figure() 函数可以创建一个新的 Figure。
  3. 通过 figsize=(width, height) 参数可以设置 Figure 的尺寸(单位:英寸),它控制最终输出图片的大小和比例。
  4. 一个 Figure 中可以包含多个子图(Axes),这是组织复杂图表的基础。
  5. 标准的绘图流程是:创建并设置 Figure → 在 Figure 上添加子图或直接绘图 → 显示图形。

📋 行动清单

  • 将示例代码中的 figsize 改为 (8, 2) 和 (2, 8) 并运行,直观感受长宽比对图形显示区域的影响。
  • 尝试不写 plt.figure(figsize=...) 这一行,直接绘图,观察生成的图形尺寸(这是默认尺寸)。
  • 思考:如果想在一张画板上并排绘制两个曲线图,应该怎么做?(提示:这涉及到子图的概念,我们将在后续章节学习。)

—— 小象教研组

配套资料 · 直接下载

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

  • 第5章代码包:figure(含1 个 Notebook)
    ZIP · 598B
    下载