Matplotlib 网格线

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 可用网格规范

告诉我你的需求!

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部