0Pricing
Python Academy · 课时

图形与坐标轴

理解绘图模型

图形与坐标轴 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

绘图模型

Matplotlib 是 Python 的基础绘图库。要熟练使用它,您必须理解它的两层模型:图形和坐标系。

图形是绘制所有内容的整体窗口或页面。坐标系是图形中的单个绘图区,拥有自己的 x 和 y 坐标系统。

  • 一个图形可以容纳多个坐标系
  • 每个坐标系都是数据实际所在的位置

图形、坐标系与坐标轴

以下三个术语很容易混淆:

  • 图形:整个图像,也就是容器
  • 坐标系:单个绘图区(注意英文拼写,它不是“坐标轴”的复数形式)
  • 坐标轴:坐标系内部的 x 轴或 y 轴刻度线

因此,一个图形包含多个坐标系,而每个坐标系包含两个(或三个)坐标轴对象。

创建图形和坐标系

推荐的起始方式是 plt.subplots()。它通过一次调用返回一个图形和一个坐标系。

即使不进行渲染,这个模型本身也很容易理解。下面我们模拟这些对象所代表的内容。

fig = {'type': 'Figure', 'axes': []}
ax = {'type': 'Axes', 'parent': 'Figure'}
fig['axes'].append(ax)
print('Figure holds', len(fig['axes']), 'axes')
print('Axes parent is the', ax['parent'])

pyplot 接口

Matplotlib 提供两种风格。pyplot(基于状态的)风格使用 plt.plot(),并自动跟踪当前图形。面向对象风格则明确使用 ax.plot()。

除了快速绘制草图之外,建议优先使用面向对象风格。当您有多个坐标系时,这种风格更加清晰。

面向对象为何更好

调用 plt.title('X') 时,它会应用到当前所处的坐标系。在包含多个子图时,这种行为就会变得含义不明确。

使用 ax.set_title('X') 时则不需要猜测:该方法会准确作用于您指定的坐标系。

坐标系统

每个坐标系都会将数据值映射到显示位置。数据坐标表示数值的含义;坐标系会对它们进行缩放,使其适合绘图区。

我们可以用基础数学来建立这个映射模型。

data_min, data_max = 0, 100
pixel_min, pixel_max = 0, 400

def to_pixels(value):
    frac = (value - data_min) / (data_max - data_min)
    return pixel_min + frac * (pixel_max - pixel_min)

for v in [0, 25, 50, 100]:
    print('data', v, '->', to_pixels(v), 'px')

图形大小和 DPI

图形的大小以英寸为单位,分辨率以每英寸点数(DPI)为单位。像素大小就是两者的乘积。

例如,6×4 英寸、分辨率为 100 DPI 的图形大小是 600×400 像素。

width_in, height_in = 6, 4
dpi = 100
print('Pixels:', width_in * dpi, 'x', height_in * dpi)

手动添加坐标系

除了 plt.subplots(),您还可以使用 fig.add_axes([left, bottom, width, height]) 在精确的矩形区域中添加坐标系,其中每个值都是图形尺寸的 0 到 1 之间的比例。

内嵌图和自定义布局就是通过这种方式构建的。

当前图形

Pyplot 会维护一个图形注册表和一个指向当前图形的指针。plt.gcf() 获取当前图形,plt.gca() 获取当前坐标系。

这些功能主要用于支持基于状态的风格。在面向对象的代码中,您可以改为自行保存引用。

显示和关闭

plt.show() 会在窗口中渲染所有打开的图形。plt.close() 会释放一个图形。在生成许多图形的脚本中,关闭图形可以防止内存不断增长。

在笔记本环境中,图形会自动以内嵌方式显示。

一份思维检查清单

在绘制任何内容之前,请先问自己:

  • 我需要多少个图形?
  • 每个图形需要多少个坐标区?
  • 每部分数据分别属于哪个坐标区?

先回答这些问题,面向对象接口就会显得很自然。

快速检查

检验您对图形和坐标区模型的理解。

回顾

您已经学会了 Matplotlib 的核心模型:

  • 图形 容器,大小以英寸乘 DPI 表示
  • 坐标区 独立的绘图区,拥有自己的坐标
  • 坐标轴 x 轴或 y 轴上的数轴
  • 优先使用带有 面向对象 风格的 fig, ax = plt.subplots()

掌握这个思维模型后,之后的每项自定义都会变得可预测。

常见问题解答

「图形与坐标轴」课时是免费的吗?

是的 — 「图形与坐标轴」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「图形与坐标轴」这节课中我会学到什么?

理解绘图模型 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「图形与坐标轴」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 图形与坐标轴
  2. 折线图、柱状图与散点图
  3. 自定义图表
  4. 子图与布局
← 返回 Python Academy