matplotlib库绘制函数图像
matplotlib简介
matplotlib 是 python 最著名的绘图库,它提供了一整套和 matlab 相似的命令 API,十分适合交互式进行绘图。
几个图像相关的定义:
图像(Figure)
定义:一个完整的绘图窗口或画布,相当于绘图的“纸”。
对应对象:plt.figure()
创建。
作用:容纳一个或多个坐标系(Axes)。
坐标系(Axes)
定义:显示数据的区域,通常包含 x 轴和 y 轴。
对应对象:fig.add_subplot()
或 plt.subplot()
创建。
作用:在同一个 Figure 中可以有多个 Axes,比如一个窗口里显示多张小图。
坐标轴(Axis)
定义:控制坐标刻度和标签的对象,分为 X 轴(XAxis)和 Y 轴(YAxis)。
作用:
- 显示刻度值(
ticks
) - 控制坐标范围(
plt.xlim()
/plt.ylim()
) - 设置刻度标签(
plt.xticks()
/plt.yticks()
)
数据曲线(Line2D)
定义:由一系列点连接成的线,是 plt.plot()
返回的对象。
属性:
- 颜色(
color='r'
) - 线型(
linestyle='--'
) - 线宽(
linewidth=2
) - 标记(
marker='o'
)
图例(Legend)
定义:显示曲线名称的标注。
创建方式:在 plt.plot()
中加 label='名称'
,然后用 plt.legend()
显示。
标题与标签
标题:plt.title("标题")
x 轴名称:plt.xlabel("x 轴名称")
y 轴名称:plt.ylabel("y 轴名称")
网格(Grid)
定义:背景参考线,用于帮助读取数值。
开启方式:plt.grid(True)
颜色(Color)
常用写法:
- 字母:
'r'
红,'g'
绿,'b'
蓝 - 英文单词:
color='red'
- RGB:
color=(0.2, 0.4, 0.6)
- 十六进制:
color='#1f77b4'
线型(Linestyle)
'-'
:实线(默认)'--'
:虚线'-.'
:点划线':'
:点线
标记(Marker)
'o'
圆点's'
方形'^'
上三角'*'
星形'+'
加号
绘图步骤
1. 导入必要库
1 | import numpy as np # 用于数值计算和生成数据 |
2. 定义自变量(x 轴)
一般用 numpy.linspace
或 numpy.arange
来生成一系列连续的 x 值。
1 | # 生成从 -10 到 10 的 200 个等间距的点 |
3. 定义函数(y 轴)
直接在 Python 中用数学公式写出来即可。
1 | # 例如:y = sin(x) |
4. 绘制图像
1 | plt.plot(x, y, label='y = sin(x)', color='b') # 画线并加标签 |
5. 美化图像(可选)
1 | plt.title("Sine Function") # 图像标题 |
6. 显示图像
1 | plt.show() |
完整示例
1 | import numpy as np |
隐式创建机制
当你调用
1 | plt.plot(...) |
的时候,matplotlib 会:
- 检查当前是否有 Figure(画布)存在,如果没有,就创建一个默认的
Figure
。 - 在这个 Figure 上放一个默认的 Axes(坐标系)。
- 在 Axes 中画你的线条。
所以,即使你没写 fig, ax = plt.subplots()
,它也会帮你自动搞定。
显式创建写法
1 | fig, ax = plt.subplots() # 显式创建 Figure 和 Axes |
多个子图
subplots()
是 matplotlib 里同时创建 Figure(画布) 和一个或多个 Axes(坐标系) 的常用方法。
它的强大之处在于:可以一次性创建多个子图,方便你在一个窗口里比较不同的函数或数据。
1 | fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(宽, 高), dpi=分辨率) |
nrows
:子图的行数ncols
:子图的列数figsize
:画布大小(英寸)dpi
:分辨率(每英寸像素点数)
返回值:
fig
→ Figure 对象(整个画布)ax
→ Axes 对象(一个或多个坐标系)
默认返回1行1列的子图
多个子图
1 | fig, ax = plt.subplots(2, 2, figsize=(8, 6)) # 创建2x2子图 |
注意:
- 多个子图时,
ax
是一个二维 numpy 数组(行、列索引)。 - 如果是
nrows=1
或ncols=1
,ax
可能是一维数组或直接是单个对象。
共享坐标轴
1 | fig, ax = plt.subplots(2, 1, sharex=True, sharey=False) |
sharex=True
:共享 x 轴范围sharey=True
:共享 y 轴范围- 好处:对齐刻度,方便比较