Skip to content

NumPy - Matplotlib

Matplotlib 是 Python 中最广泛使用的数据可视化库。它提供了一个强大且灵活的平台,用于创建静态、动画和交互式图表。当与 NumPy 一起使用时,它提供了一个类似于 MATLAB 的数值计算和绘图环境,但属于开源的 Python 生态系统。

Matplotlib 与 NumPy 数组集成良好,可以轻松绘制使用 NumPy 生成或处理的数据。它还可以嵌入到各种图形用户界面 (GUI) 工具包中,如 Tkinter、PyQt 和 wxPython。

matplotlib.pyplot 子模块提供了一个方便的接口来创建图表。按照惯例,它被导入为 plt:

import matplotlib.pyplot as plt

plt.plot() 函数是创建二维线图的基本函数。让我们来绘制简单的线性方程 y = 2x + 5。

import numpy as np
import matplotlib.pyplot as plt
# 使用 NumPy 准备数据
x = np.arange(1, 11) # x 值从 1 到 10
y = 2 * x + 5 # 相应的 y 值
# 创建图表
plt.plot(x, y) # 绘制 y 关于 x 的图
# 添加标签和标题以提高清晰度
plt.title("Simple Line Plot")
plt.xlabel("X Axis Label")
plt.ylabel("Y Axis Label")
# 显示图表
plt.show()

首先,使用 np.arange() 创建一个 NumPy 数组 x。相应的 y 值使用逐元素运算计算得出。plt.plot(x, y) 生成线图。plt.title()、plt.xlabel() 和 plt.ylabel() 等函数添加描述性元素。最后,plt.show() 显示生成的图表窗口。

预期输出描述:

此代码将显示一个包含图表的窗口。该图表显示了一条从左向右上升的直线,表示 x 值从 1 到 10 时线性关系 y = 2x + 5。x 轴和 y 轴分别标记为 “X Axis Label” 和 “Y Axis Label”,图表的标题是 “Simple Line Plot”。

您可以通过向 plot() 函数提供一个格式字符串 (format string) 来自定义图表的外观。此字符串可以指定颜色、标记样式 (marker style) 和线样式 (line style)。

常用标记样式:

字符描述
’.‘点标记
’o’圆形标记
’s’方形标记
’^‘上三角标记
’*‘星形标记
’+‘加号标记
’x’X 形标记
’D’菱形标记

常用线样式:

字符描述
’-‘实线样式
’—‘虚线样式
’-.‘点划线样式
’:‘点线样式

常用颜色缩写:

字符颜色
’b’蓝色
’g’绿色
’r’红色
’c’青色
’m’品红色
’y’黄色
’k’黑色
’w’白色

例如,要绘制蓝色圆圈而不是线条,请使用格式字符串 'ob'(‘o’ 代表圆形标记,‘b’ 代表蓝色)。

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("Plot with Markers")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
# 使用蓝色 ('b') 圆形 ('o') 标记进行绘图
plt.plot(x, y, 'ob')
plt.show()

预期输出描述:

此代码将显示一个类似于第一个示例的图表,但不是实线,而是在每个 (x, y) 数据点处显示单个蓝色圆形标记。

一个常见的例子是绘制三角函数,如正弦波。

import numpy as np
import matplotlib.pyplot as plt
# 计算正弦曲线上点的 x 和 y 坐标
x = np.arange(0, 3 * np.pi, 0.1) # x 值从 0 到 3*pi,步长为 0.1
y = np.sin(x) # 计算每个 x 值的正弦
plt.title("Sine Wave")
plt.xlabel("x (radians)")
plt.ylabel("sin(x)")
# 使用 matplotlib 绘制点
plt.plot(x, y)
plt.show()

预期输出描述:

这将显示一个图表窗口,显示一个平滑的正弦波,在 y 轴上介于 -1 和 1 之间振荡,x 轴范围从 0 到大约 9.42 (3 * pi)。

plt.subplot() 函数允许您在同一个图表窗口内(以网格形式)排列多个图表。您需要指定行数、列数和当前图表的索引。

示例:在子图中绘制正弦和余弦

Section titled “示例:在子图中绘制正弦和余弦”
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦和余弦曲线上点的 x 和 y 坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 创建一个图表 (figure) 和一组子图 (subplots)
# plt.figure() # 可选:创建一个新的图表
# 设置子图网格:2 行,1 列。激活第一个子图。
plt.subplot(2, 1, 1)
plt.plot(x, y_sin)
plt.title('Sine')
plt.ylabel('sin(x)')
# 激活第二个子图。
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
plt.xlabel('x (radians)')
plt.ylabel('cos(x)')
# 调整布局以防止标题/标签重叠
plt.tight_layout()
# 显示包含两个子图的图表。
plt.show()

预期输出描述:

这将显示一个包含两个垂直堆叠图表的窗口。顶部图表显示标题为“Sine”的正弦波,底部图表显示标题为“Cosine”的余弦波。两个图表共享相同的 x 轴范围。

plt.bar() 函数创建条形图 (bar charts),适用于比较分类数据。

import matplotlib.pyplot as plt
# 第一组条形图的数据
x = [5, 8, 10]
y = [12, 16, 6]
# 第二组条形图的数据
x2 = [6, 9, 11]
y2 = [6, 15, 7]
# 创建条形图
plt.bar(x, y, align='center', label='Set 1')
# 绘制第二组,使用不同颜色
plt.bar(x2, y2, color='g', align='center', label='Set 2')
plt.title('Bar Graph Example')
plt.ylabel('Y axis values')
plt.xlabel('X axis categories/positions')
plt.legend() # 显示标签
plt.show()

预期输出描述:

此代码显示一个条形图。它在不同的 x 位置显示两组条形。第一组(在 x=5, 8, 10 处)默认为蓝色,第二组(在 x=6, 9, 11 处)为绿色 (‘g’)。条形的高度对应于 y 值。图例区分“Set 1”和“Set 2”。