NumPy - Matplotlib
NumPy - 使用 Matplotlib 绘图
Section titled “NumPy - 使用 Matplotlib 绘图”Matplotlib 是 Python 中最广泛使用的数据可视化库。它提供了一个强大且灵活的平台,用于创建静态、动画和交互式图表。当与 NumPy 一起使用时,它提供了一个类似于 MATLAB 的数值计算和绘图环境,但属于开源的 Python 生态系统。
Matplotlib 与 NumPy 数组集成良好,可以轻松绘制使用 NumPy 生成或处理的数据。它还可以嵌入到各种图形用户界面 (GUI) 工具包中,如 Tkinter、PyQt 和 wxPython。
matplotlib.pyplot 子模块提供了一个方便的接口来创建图表。按照惯例,它被导入为 plt:
import matplotlib.pyplot as pltplt.plot() 函数是创建二维线图的基本函数。让我们来绘制简单的线性方程 y = 2x + 5。
示例:基本线图
Section titled “示例:基本线图”import numpy as npimport matplotlib.pyplot as plt
# 使用 NumPy 准备数据x = np.arange(1, 11) # x 值从 1 到 10y = 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’ 代表蓝色)。
示例:带标记的绘图
Section titled “示例:带标记的绘图”import numpy as npimport 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) 数据点处显示单个蓝色圆形标记。
一个常见的例子是绘制三角函数,如正弦波。
示例:绘制正弦曲线
Section titled “示例:绘制正弦曲线”import numpy as npimport matplotlib.pyplot as plt
# 计算正弦曲线上点的 x 和 y 坐标x = np.arange(0, 3 * np.pi, 0.1) # x 值从 0 到 3*pi,步长为 0.1y = 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)。
subplot()
Section titled “subplot()”plt.subplot() 函数允许您在同一个图表窗口内(以网格形式)排列多个图表。您需要指定行数、列数和当前图表的索引。
示例:在子图中绘制正弦和余弦
Section titled “示例:在子图中绘制正弦和余弦”import numpy as npimport 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),适用于比较分类数据。
示例:简单条形图
Section titled “示例:简单条形图”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”。