Matplotlib - 网格
在一般的数据可视化和绘图中,grids(网格)指的是覆盖在绘图区域上的水平和垂直线组。网格线有助于更好地理解图表上的数据。通常,这些线与 x 轴和 y 轴上的主要刻度标记对齐。它们可以提高图表的可读性,并使值的估算变得更容易。
参考下图 −
网格线主要有两种类型 −
Major Gridlines(主要网格线)− 这些是与轴上的主要刻度标记对齐的主要网格线。
Minor Gridlines(次要网格线)− 这些是在主要网格线之间并与轴上的次要刻度标记对齐的额外网格线。
Matplotlib 中的网格介绍
在 Matplotlib 中启用网格线是一个简单直接的过程。pyplot.grid() 方法会为图表添加主要网格线,并提供额外的自定义选项,包括调整线型、线宽、颜色和透明度。
让我们探索向图表添加网格线不同的方法。
带网格的基本绘图
在 Matplotlib 中,默认网格是一组与 x 轴和 y 轴主要刻度标记对齐的主要网格线。
示例 - 创建网格
在本示例中,我们创建一个基本的正弦波图并添加默认网格。
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
# 创建图表
fig, ax = plt.subplots(figsize=(7,4))
# 绘制数据
plt.plot(x, y)
# 添加网格
ax.grid(True)
# 设置标题
ax.set_title('Basic Plot with Grids')
# 显示图表
plt.show()
输出
执行上述代码将得到以下输出 −
自定义网格
自定义网格线包括线型、线宽、颜色和透明度。
示例 - 自定义网格
此示例演示如何通过更改线型、线宽、颜色和透明度来自定义网格线。
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.arange(0, 1, 0.05)
y = x**2
# 创建图表
fig, ax = plt.subplots(figsize=(7,4))
# 绘制数据
plt.scatter(x, y)
# 自定义网格
ax.grid(True, linestyle='-.', linewidth=1, color='red', alpha=0.9)
# 设置标题
ax.set_title('Customizing Grids')
# 显示图表
plt.show()
输出
执行上述代码将得到以下输出 −
添加次要网格线
除了主要网格线外,Matplotlib 还支持添加次要网格线。这些线位于主要网格线之间,并与 x 轴和 y 轴上的次要刻度标记对齐。您可以使用 pyplot.minorticks_on() 和 plt.grid(which='minor') 来添加对应于次要刻度的网格线。示例 - 创建次要网格线
此示例演示如何向图表添加主要和次要网格线。
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.arange(0, 1, 0.05)
y = x**2
# 创建图表
fig, ax = plt.subplots(figsize=(7,4))
# 绘制数据
plt.scatter(x, y)
# 添加主要网格
ax.grid(True)
# 添加次要网格
ax.minorticks_on()
ax.grid(which='minor', linestyle=':', linewidth=0.5, color='red', alpha=0.5)
# 设置标题
ax.set_title('Major and Minor Gridlines')
# 显示图表
plt.show()
输出
执行上述代码将得到以下输出 −

手动添加网格线
这种方法涉及明确指定垂直线和水平线的的位置。通过遍历特定的间隔或值,用户可以在所需位置绘制网格线。这需要使用函数如 pyplot.axvline() 和 pyplot.axhline() 来分别绘制垂直线和水平线。
示例 - 手动添加网格线
以下是一个示例,在 x 轴上每第三个点处手动绘制垂直网格线。
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.arange(0, 1, 0.05)
y = x**2
# 创建图形
plt.subplots(figsize=(7,4))
# 绘制数据
plt.scatter(x, y)
# 设置 x 和 y 刻度位置
plt.xticks(np.arange(0, 1.01, 0.1))
plt.yticks(np.arange(0, 1.01, 0.1))
plt.title('手动绘制网格线 ')
# 在 x 轴上每第三个点处绘制网格线
for pt in np.arange(0, 1.01, 0.3):
plt.axvline(pt, lw=0.5, color='black', alpha=0.5)
# 显示图形
plt.show()
输出
执行上述代码将得到以下输出 −
隐藏网格线
通过将布尔值 False 指定给 grid() 函数,可以隐藏或移除图中的网格线。
示例 - 隐藏网格线
以下是一个示例,隐藏图的网格线和轴(X 轴和 Y 轴)。
import numpy as np
import matplotlib.pyplot as plt
# 创建图形
fig = plt.figure(figsize=(7, 4))
# 生成数据
x = np.linspace(-10, 10, 50)
y = np.sin(x)
# 绘制水平线
plt.axhline(y=0, c="green", linestyle="dashdot", label="y=0")
# 绘制正弦曲线
plt.plot(x, y, c="red", lw=5, linestyle="dashdot", label="y=sin(x)")
# 隐藏网格线
plt.grid(False)
# 隐藏轴
plt.axis('off')
# 添加图例
plt.legend()
# 显示图形
plt.show()
输出
执行上述代码将得到以下输出 −
跨子图的网格线
在比较多个子图中的数据时,在所有子图上使用网格线有助于保持图形之间的视觉比较。
示例 - 跨子图的网格线
以下是一个演示如何在子图上绘制网格线的示例。
import matplotlib.pyplot as plt # 数据 d = [1, 2, 3, 4, 5, 6, 7, 8, 9] f = [0, 1, 0, 0, 1, 0, 1, 1, 0] # 创建图形和子图 fig = plt.figure(figsize=(7,4)) fig.set_size_inches(30, 10) ax1 = fig.add_subplot(211) ax2 = fig.add_subplot(212) # 在子图上绘制数据 ax1.plot(d, marker='.', color='b', label="1 row") # 在柱状图后面绘制网格线 ax2.bar(range(len(d)), d, color='red', alpha=0.5) # 在两个子图上启用网格 ax1.grid() ax2.grid() # 显示图形 plt.show()
输出
执行上述代码将得到以下输出 −
