现在位置: 首页 > Matplotlib 教程 > 正文

Matplotlib plot() 函数


Matplotlib 参考文档 Matplotlib 参考文档

plot() 是 Matplotlib 中最核心的函数,用于绘制折线图。

它通过连接给定的 x 和 y 坐标点来创建线条,支持自定义颜色、线型、标记和线宽。

函数定义

pyplot 接口

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

Axes 接口

Axes.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

参数说明

参数类型说明
*args可变参数支持多种调用方式:plot(y)、plot(x, y)、plot(x, y, 'fmt')、plot(x1, y1, 'fmt1', x2, y2, 'fmt2', ...)
scalex / scaleybool是否自动缩放 x/y 轴以适应数据,默认为 True
data可索引对象若提供,则可以用字符串作为参数引用其中的数据列
color 或 ccolor线条颜色,如 'red'、'#ff0000'、'tab:blue'
linestyle 或 lsstr线型:'-'(实线)、'--'(虚线)、'-.'(点划线)、':'(点线)、''(无线条)
linewidth 或 lwfloat线宽,默认约 1.5
markerstr数据点标记:'.'、'o'、's'、'^'、'*'、'+'(加号)、'x' 等
markersize 或 msfloat标记大小
labelstr图例标签,配合 legend() 使用
alphafloat透明度,0(完全透明)到 1(完全不透明)
zorderfloat图层顺序,数值越大越靠上

fmt 格式字符串由三部分组成:'[颜色][标记][线型]',如 'ro--' 表示红色、圆点标记、虚线。各部分顺序可任意排列。

常用颜色简写

字符颜色字符颜色
'b'蓝色 blue'r'红色 red
'g'绿色 green'c'青色 cyan
'm'品红 magenta'y'黄色 yellow
'k'黑色 black'w'白色 white

使用示例

示例 1:最简单的折线图

只传入 y 值,x 自动使用从 0 开始的索引。

实例

import matplotlib.pyplot as plt
import numpy as np

# 生成 0-10 之间的 50 个数据点
x = np.linspace(0, 10, 50)
y = np.sin(x)  # 正弦函数

# 最简单的调用:x, y
plt.plot(x, y)

plt.title('Simple Line Plot')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True, alpha=0.3)
plt.show()

示例 2:多条曲线 + 格式字符串

在同一图上绘制多条曲线,使用不同的颜色、线型和标记。

实例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 50)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.exp(-x / 3)  # 阻尼正弦

# 多条曲线,每种使用不同格式
plt.plot(x, y1, 'b-o', label='sin(x)')           # 蓝色实线 + 圆点
plt.plot(x, y2, 'r--s', label='cos(x)')          # 红色虚线 + 方块
plt.plot(x, y3, 'g-.^', label='damped sin(x)')   # 绿色点划线 + 三角

plt.title('Multiple Lines with Different Styles')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

示例 3:使用关键字参数自定义样式

使用关键字参数更精细地控制线条外观。

实例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# 使用关键字参数而非格式字符串,更易读
ax.plot(x, np.sin(x),
        color='steelblue',        # 颜色名称
        linestyle='-',            # 实线
        linewidth=2.5,            # 线宽
        marker='o',               # 圆点标记
        markersize=4,             # 标记大小
        markerfacecolor='red',    # 标记填充色
        markeredgecolor='black',  # 标记边框色
        markeredgewidth=0.5,      # 标记边框宽
        alpha=0.8,                # 整体透明度
        label='sin(x)')

# 对比:无标记的虚线
ax.plot(x, np.cos(x),
        color='#ff6600',          # 十六进制颜色
        linestyle='--',
        linewidth=2,
        label='cos(x)')

ax.set_title('Customized Line Styles', fontsize=14)
ax.set_xlabel('x (radians)')
ax.set_ylabel('Amplitude')
ax.legend(loc='upper right')
ax.grid(True, alpha=0.2)
plt.show()
print("runoob: customized plot displayed")

示例 4:使用 data 参数(DataFrame 支持)

当数据是 dict 或 pandas DataFrame 时,可使用字符串列名。

实例

import matplotlib.pyplot as plt
import numpy as np

# 将数据组织为字典
data = {
    'time': np.arange(0, 10, 0.5),
    'voltage': np.sin(np.arange(0, 10, 0.5)) * 5 + 10,
    'current': np.cos(np.arange(0, 10, 0.5)) * 2 + 5,
}

fig, ax = plt.subplots(layout='constrained')

# 通过 data 参数 + 字符串列名引用数据
ax.plot('time', 'voltage', 'b-', data=data, label='Voltage (V)')
ax.plot('time', 'current', 'r--', data=data, label='Current (A)')

ax.set_title('Using data Parameter with Column Names')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Value')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

示例 5:在 Axes 对象上调用(推荐方式)

使用面向对象的 Axes 接口,在多子图场景中更清晰。

实例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

# 创建两个并排子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
                                layout='constrained')

# 左子图:数学函数
ax1.plot(x, np.sin(x), label='sin(x)')
ax1.plot(x, np.cos(x), label='cos(x)')
ax1.set_title('Math Functions')
ax1.legend()
ax1.grid(True, alpha=0.3)

# 右子图:数据趋势
data = np.random.randn(100).cumsum()  # 随机游走
ax2.plot(data, color='teal', linewidth=1.5)
ax2.set_title('Random Walk (cumulative sum)')
ax2.set_xlabel('Step')
ax2.set_ylabel('Position')
ax2.grid(True, alpha=0.3)

plt.show()

常见问题

plot() 中 x 和 y 的顺序

标准调用是 plot(x, y),x 在前、y 在后。

如果只传入一个数组,如 plot(y),则 x 自动取 range(0, len(y))

如何绘制不连续的线段?

对于包含 NaN 的数据,plot() 会自动在 NaN 处断开线段,这可用于绘制分段线条。

fmt 字符串和关键字参数能同时使用吗?

可以,关键字参数会覆盖 fmt 字符串中的对应设置。例如 plot(x, y, 'ro', color='blue') 中,marker='o' 来自 fmt,但 color 会被覆盖为 blue。


Matplotlib 参考文档 Matplotlib 参考文档