查看全课大纲(第 40 / 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 如何快速统计元素出现次数?

如何自定义 Matplotlib 的坐标轴?

约 6 分钟

小象实战讲义 · Python 编程从入门到实践

在上一节,我们学习了如何使用 Matplotlib 创建一张基本的图表。一张完整的图表除了数据点构成的图形,还离不开清晰的坐标轴。坐标轴决定了我们观察数据的“窗口”范围,也帮助我们理解数据的含义。本节我们将学习如何自定义坐标轴,包括设置其显示范围和添加标签,让你的图表信息更完整、更专业。

💡 核心导读

  • 设置坐标轴范围:使用 plt.xlim() 和 plt.ylim() 函数,可以限定 X 轴和 Y 轴的显示区间,聚焦于关键数据区域。
  • 添加坐标轴标签:使用 plt.xlabel() 和 plt.ylabel() 函数,为坐标轴添加文字说明,明确数据的物理或数学意义。
  • 自定义线条样式:在绘制多条曲线时,可以通过 color 和 linestyle 等参数区分它们,使图表更易读。
  • 学会查阅文档:Matplotlib 提供了丰富的自定义选项,掌握查阅官方文档的方法,是解决个性化绘图需求的关键技能。

设置坐标轴的范围

当我们绘制数据时,Matplotlib 会自动根据数据点的最小值和最大值来确定坐标轴的显示范围。但有时自动生成的范围可能并不理想,比如图形边缘过于拥挤,或者我们只想展示数据的某一部分。这时,就需要手动设置坐标轴的范围。

plt.xlim() 和 plt.ylim() 函数就是用来做这个的。它们都接受一个包含两个数字的元组 (最小值, 最大值) 作为参数。

import matplotlib
matplotlib.use("Agg")  # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x = np.linspace(-3, 3, 50)  # 在-3到3之间生成50个等距点
y1 = 2 * x + 1  # 直线 y = 2x + 1
y2 = x ** 2     # 抛物线 y = x^2

plt.figure(figsize=(5, 5))

# 设置坐标轴范围:X轴显示-1到2,Y轴显示-2到3
plt.xlim((-1, 2))
plt.ylim((-2, 3))

# 绘制图形
plt.plot(x, y2)
plt.plot(x, y1, color='red', linestyle='--')  # 红色虚线
plt.close()  # 关闭图形,释放资源

执行后,X 轴只显示 -1 到 2、Y 轴只显示 -2 到 3 的区间。通过设置 plt.xlim((-1, 2)),我们告诉 Matplotlib 只显示 X 轴从 -1 到 2 的区间;原始数据中 -3 到 -1 以及 2 到 3 的部分虽然被计算和绘制了,但在图表视窗中不可见。plt.ylim() 同理。

为坐标轴添加标签

没有标签的坐标轴就像没有刻度的尺子,我们不知道它代表什么。plt.xlabel() 和 plt.ylabel() 函数用于为 X 轴和 Y 轴添加文本标签。

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

plt.figure(figsize=(5, 5))

# 设置坐标轴范围
plt.xlim((-1, 2))
plt.ylim((-2, 3))

# 设置坐标轴标签
plt.xlabel('This is x')  # X轴标签
plt.ylabel('This is y')  # Y轴标签

plt.plot(x, y2)
plt.plot(x, y1, color='red', linestyle='--')  # 红色虚线
plt.close()

执行后,图表 X 轴下方会显示 “This is x”,Y 轴左侧会显示 “This is y”;图中包含一条蓝色实线(y = x²)和一条红色虚线(y = 2x + 1)。标签文本是字符串,你可以将其替换为任何有意义的描述,例如“时间 (秒)”、“温度 (°C)”、“销售额 (万元)”等。

自定义绘图线条的样式

在一张图中绘制多条曲线时,为了区分它们,我们经常需要改变线条的颜色和样式。在 plt.plot() 函数中,通过 color 参数可以指定颜色,通过 linestyle 参数可以指定线型。

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

plt.figure(figsize=(5, 5))

# 第一条曲线使用默认的蓝色实线
plt.plot(x, y2)
# 第二条曲线使用红色虚线
plt.plot(x, y1, color='red', linestyle='--')
plt.close()

执行后,图表中包含两条曲线:一条蓝色的实线(y=x²),一条红色的虚线(y=2x+1)。color 参数可以接受颜色名称的字符串(如 'red', 'blue', 'green')。linestyle 参数常用的值有:

  • '-' 或 'solid': 实线(默认)
  • '--' 或 'dashed': 虚线
  • ':' 或 'dotted': 点线
  • '-.' 或 'dashdot': 点划线

如何查找更多自定义选项?

Matplotlib 的功能非常强大,plt.plot() 等函数有数十个可选参数。实际使用时,可以通过搜索引擎查找官方文档来了解这些参数。

核心方法:当你需要实现某个特定效果(比如“红色的虚线”)但不知道参数怎么写时,最可靠的方法是查阅官方文档。

  1. 搜索关键词如 “matplotlib plot”。
  2. 在结果中找到并打开官方文档页面(通常是 matplotlib.org 下的链接)。
  3. 在文档中查找函数说明,里面会列出所有参数及其可选值。

例如,在 plt.plot() 的文档中,你可以找到 color 支持的所有颜色名称和 linestyle 支持的所有线型。坚持阅读英文官方文档,是系统掌握一个库功能的最佳途径。当然,你也可以搜索相关的中文教程和示例作为辅助。

📝 动手练一练

  1. 修改第一个示例代码,将 X 轴的显示范围改为 (0, 1),Y 轴范围改为 (0, 5),观察图表发生了怎样的变化。
  2. 把第二个示例中第二条曲线的线型改为点线(':'),观察它和虚线的区别。
👉 点击查看参考答案

思路:

  1. 直接修改 plt.xlim() 和 plt.ylim() 的参数即可改变显示范围,图表将只显示新范围内的图形部分。
  2. 把 linestyle 参数由 '--' 改为 ':' 即可得到点线。

参考代码片段:

import matplotlib
matplotlib.use("Agg")  # 无图形界面后端
import matplotlib.pyplot as plt
import numpy as np

# 练习1:修改坐标轴范围
x = np.linspace(-3, 3, 50)
y = x ** 2
plt.figure(figsize=(5,5))
plt.xlim((0, 1))
plt.ylim((0, 5))
plt.plot(x, y)
plt.close()

# 练习2:修改线型
y1 = 2 * x + 1
y2 = x ** 2
plt.figure(figsize=(5,5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linestyle=':')  # 改为点线
plt.close()

常见错误

错误写法现象或报错原因正确写法
plt.xlabel('X轴', 'Y轴')AttributeError: 'str' object has no attribute 'items'xlabel() 的第二个位置参数是字体属性字典(fontdict),不能用来传第二个标签。X、Y 轴标签必须分别设置。plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.plot(x, y, color='read')ValueError: 'read' is not a valid value for color(后面还列出一串支持的颜色写法)颜色名称拼写错误。Matplotlib 无法识别 'read',不会自动回退到默认颜色,而是直接报错。plt.plot(x, y, color='red')
同一张图上重复执行 plt.plot() 前不新建 Figure新的曲线会和旧曲线叠加在同一张图上,而不是出现一张新图。Matplotlib 的绘图状态是持续的。如果没有调用 plt.figure(),后续绘图命令会继续修改当前活动的 Figure。在绘制新图前使用 plt.figure() 创建新图形,或使用 plt.close() 关闭当前图形。

小结

  1. 控制视图范围:使用 plt.xlim((min, max)) 和 plt.ylim((min, max)) 可以精确控制图表中 X 轴和 Y 轴的显示区间,帮助聚焦于关键数据。
  2. 明确坐标含义:使用 plt.xlabel('文本') 和 plt.ylabel('文本') 为坐标轴添加描述性标签,这是制作专业图表的基本步骤。
  3. 区分多条曲线:通过 plt.plot() 的 color(颜色)和 linestyle(线型)参数,可以自定义每条曲线的外观,使图表更清晰易读。
  4. 善用官方文档:Matplotlib 提供了极其丰富的自定义选项。遇到不确定的参数或想实现特定效果时,查阅官方文档是最直接、最准确的学习方式。

📋 行动清单

  • 运行一遍本节的所有示例代码,确保理解 xlim、ylim、xlabel、ylabel 的效果。
  • 尝试将“动手练一练”中的线型 ':' 改为 '-.',观察点划线是如何显示的。
  • 搜索 “matplotlib color names”,找一两个喜欢的颜色名称,在下一次绘图中使用它。

—— 小象教研组

配套资料 · 直接下载

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

  • 第5章代码包:坐标轴(含1 个 Notebook)
    ZIP · 675B
    下载