Matplotlib 网格线(Grid)完全指南
网格线是科学绘图的「灵魂辅助线」,能 提升数据可读性、辅助数值判断、增强视觉美感。本教程带你从入门到专业,掌握 开启/关闭、样式、颜色、透明度、双轴、自定义间距、艺术网格 等全部技巧。
一、基本开启网格
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.grid(True) # 关键一行
plt.show()
plt.grid(True)= 默认网格(基于刻度)
二、核心参数详解
plt.grid(True,
which='major', # 'major'(主)、'minor'(次)、'both'
axis='both', # 'both', 'x', 'y'
color='gray', # 颜色
linestyle='-', # 线型
linewidth=0.8, # 线宽
alpha=0.7) # 透明度
三、网格类型:主网格 vs 次网格
# 启用次刻度
plt.minorticks_on()
plt.grid(True, which='major', linewidth=1.2, color='black', alpha=0.8)
plt.grid(True, which='minor', linewidth=0.6, color='lightgray', alpha=0.5, linestyle=':')
次网格 需配合
minorticks_on()才能显示
四、仅显示 X 或 Y 网格
plt.grid(True, axis='y') # 仅 Y 轴网格
plt.grid(True, axis='x') # 仅 X 轴网格
五、线型与样式
| 样式 | 代码 |
|---|---|
| 实线 | '-' |
| 虚线 | '--' |
| 点线 | ':' |
| 点划线 | '-.' |
| 自定义 | dashes=[6, 2] |
plt.grid(True, linestyle='--', linewidth=1, color='red', alpha=0.6)
六、面向对象方式(推荐)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.grid(True,
which='both',
axis='both',
color='gray',
linestyle='-',
linewidth=0.8,
alpha=0.7)
ax.legend()
plt.show()
ax.grid()更灵活,适合多子图
七、自定义网格间距(进阶)
# 方法1:设置主/次刻度位置
ax.set_xticks(np.arange(0, 11, 1)) # 主刻度每1
ax.set_xticks(np.arange(0, 11, 0.5), minor=True) # 次刻度每0.5
ax.set_yticks(np.arange(-1, 1.1, 0.5))
ax.set_yticks(np.arange(-1, 1.1, 0.1), minor=True)
ax.grid(True, which='major', color='black', linewidth=1)
ax.grid(True, which='minor', color='lightgray', linewidth=0.5, linestyle=':')
八、双 Y 轴网格协调
fig, ax1 = plt.subplots()
ax1.plot(x, np.sin(x), 'b-', label='sin(x)')
ax1.set_ylabel('sin(x)', color='b')
ax1.grid(True, axis='y', color='blue', alpha=0.3)
ax2 = ax1.twinx()
ax2.plot(x, np.exp(-x/5), 'r-', label='exp(-x/5)')
ax2.set_ylabel('exp(-x/5)', color='r')
ax2.grid(True, axis='y', color='red', alpha=0.3)
plt.title('双Y轴独立网格')
plt.show()
九、艺术网格:美观与功能兼得
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, np.sin(x), 'purple', linewidth=2)
# 主网格:醒目
ax.grid(True, which='major', color='black', linewidth=1.2, alpha=0.8)
# 次网格:辅助
ax.minorticks_on()
ax.grid(True, which='minor', color='gray', linewidth=0.6, alpha=0.4, linestyle='--')
# 背景色
ax.set_facecolor('#f8f8f8')
ax.set_title('艺术级网格设计', fontsize=16, fontweight='bold', pad=20)
plt.show()
十、完整专业示例(论文级)
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-v0_8')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 2*np.pi, 200)
y1, y2 = np.sin(x), np.cos(x)
fig, ax = plt.subplots(figsize=(11, 7))
# 绘图
ax.plot(x, y1, '#1f77b4', linewidth=2.5, label=r'$\sin(x)$')
ax.plot(x, y2, '#ff7f0e', linewidth=2.5, label=r'$\cos(x)$')
# 网格系统
ax.minorticks_on()
# 主网格:深灰,实线,突出
ax.grid(True, which='major',
color='#2e2e2e', linewidth=1.1, alpha=0.9, zorder=0)
# 次网格:浅灰,虚线,辅助
ax.grid(True, which='minor',
color='#cccccc', linewidth=0.7, alpha=0.6,
linestyle='--', dashes=[6, 4], zorder=0)
# 刻度设置
ax.set_xticks(np.arange(0, 2*np.pi + 0.1, np.pi/2))
ax.set_xticklabels(['0', r'$\pi/2$', r'$\pi$', r'$3\pi/2$', r'$2\pi$'])
ax.set_yticks(np.arange(-1, 1.1, 0.5))
# 美化
ax.set_title('三角函数波形分析(专业网格系统)', fontsize=18, fontweight='bold', pad=25)
ax.set_xlabel('角度 (rad)', fontsize=14)
ax.set_ylabel('函数值', fontsize=14)
ax.legend(loc='upper right', fontsize=12, frameon=True, fancybox=True, shadow=True)
# 边框优化
for spine in ax.spines.values():
spine.set_linewidth(1.2)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# 背景
ax.set_facecolor('#fafafa')
plt.tight_layout()
plt.savefig('pro_grid_system.png', dpi=300, bbox_inches='tight', facecolor='white')
plt.show()
十一、网格速查表(收藏用)
# 标准网格
plt.grid(True)
# 专业网格
plt.minorticks_on()
plt.grid(True, which='major', color='black', linewidth=1, alpha=0.8)
plt.grid(True, which='minor', color='lightgray', linewidth=0.5, linestyle=':')
# 关闭网格
plt.grid(False)
# 仅Y轴网格
plt.grid(True, axis='y')
十二、常见问题解决
| 问题 | 解决方案 |
|---|---|
| 次网格不显示 | 加 plt.minorticks_on() |
| 网格遮挡数据线 | 设置 zorder=0,线条 zorder=3 |
| 网格颜色太刺眼 | alpha=0.5~0.7 |
| 网格间距不均匀 | 手动 set_xticks() |
| 保存后网格模糊 | plt.savefig(..., dpi=300) |
十三、推荐网格风格
| 场景 | 推荐设置 |
|---|---|
| 论文发表 | 主黑实线 + 次灰虚线 |
| PPT 演示 | 浅灰实线,alpha=0.4 |
| 数据探索 | 仅主网格,color='lightblue' |
| 暗色主题 | 白线,color='#ffffff', alpha=0.3 |
官方文档
- 网格 API:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html
- 示例:https://matplotlib.org/stable/gallery/lines_bars_and_markers/grid_custom.html
总结:三步打造专业网格
# 1. 开启次刻度
plt.minorticks_on()
# 2. 主网格(醒目)
plt.grid(True, which='major', color='black', linewidth=1, alpha=0.8)
# 3. 次网格(辅助)
plt.grid(True, which='minor', color='lightgray', linewidth=0.5, linestyle='--', alpha=0.6)
一键艺术网格:
plt.minorticks_on()
plt.grid(True, which='major', color='#333333', linewidth=1.1)
plt.grid(True, which='minor', color='#dddddd', linewidth=0.6, linestyle='--')
需要我为你:
- 生成 网格风格对比图(6种风格)?
- 制作 Jupyter 网格配置小工具?
- 输出 LaTeX/PPT 可用网格规范?
告诉我你的需求!