Matplotlib 简明教程

Matplotlib - Grids

总体而言,数据可视化和绘图, grids 指的是绘图区域上的水平和垂直线集合。网格线有助于更好地理解绘图中的数据。通常,这些线与 x 轴和 y 轴上的主要刻度线对齐。它们可以增强绘图的可读性并使其更容易评估值。

参阅以下示例图像 −

grids

主要有两种类型的网格线 -

  1. Major Gridlines - 这些是与坐标轴上的主要刻度线对齐的主要网格线。

  2. Minor Gridlines - 这些是主要网格线之间的附加网格线,并与坐标轴上的次要刻度线对齐。

Introduction to Grids in Matplotlib

启用网格线是 Matplotlib 中一个简单的过程。pyplot.grid() 方法将主要网格线添加到绘图中,并提供其他自定义选项,包括调整线型、线宽、颜色和透明度。

让我们探索向绘图中添加网格线的不同方法。

Basic Plot with Grids

在 Matplotlib 中,默认网格是一组与 x 轴和 y 轴上的主要刻度线对齐的主要网格线。

Example

在此示例中,我们创建了一个基本的正弦波绘图并添加了默认网格。

import matplotlib.pyplot as plt
import numpy as np

# Create some data
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# create a plot
fig, ax = plt.subplots(figsize=(7,4))

# Plot the data
plt.plot(x, y)

# Add grid
ax.grid(True)

# set the title
ax.set_title('Basic Plot with Grids')

# Show the plot
plt.show()

执行上述代码,我们将得到以下输出 −

grids ex1

Customizing Grid

自定义网格线包括线型、线宽、颜色和透明度。

Example

此示例演示如何通过更改其线型、线宽、颜色和透明度来自定义网格线。

import matplotlib.pyplot as plt
import numpy as np

# Create some data
x = np.arange(0, 1, 0.05)
y = x**2

# Create the plot
fig, ax = plt.subplots(figsize=(7,4))

# Plot the data
plt.scatter(x, y)

# Customize grid
ax.grid(True, linestyle='-.', linewidth=1, color='red', alpha=0.9)

# set the title
ax.set_title('Customizing Grids')

# Show the plot
plt.show()

执行上述代码,我们将得到以下输出 −

grids ex2

Adding Minor Gridlines

Example

此示例演示如何将主网格线和次网格线全部添加到绘图中。

import matplotlib.pyplot as plt
import numpy as np

# Create some data
x = np.arange(0, 1, 0.05)
y = x**2

# Create the plot
fig, ax = plt.subplots(figsize=(7,4))

# Plot the data
plt.scatter(x, y)

# Add major grid
ax.grid(True)

# Add minor grid
ax.minorticks_on()
ax.grid(which='minor', linestyle=':', linewidth=0.5, color='red', alpha=0.5)

# set the title
ax.set_title('Major and Minor Gridlines')

# Show the plot
plt.show()

执行上述代码,我们将得到以下输出 −

grids ex3

Manually adding the grids

此方法涉及明确指定垂直线和水平线的位置。通过遍历特定的间隔或值,用户可以在所需位置绘制网格线。这涉及使用类似 pyplot.axvline()pyplot.axhline() 的函数分别绘制垂直线和水平线。

Example

以下是一个手动在 x 轴上每三个点绘制垂直网格线的示例。

import matplotlib.pyplot as plt
import numpy as np

# Create some data
x = np.arange(0, 1, 0.05)
y = x**2

# Create the plot
plt.subplots(figsize=(7,4))

# Plot the data
plt.scatter(x, y)

# Set x and y tick locations
plt.xticks(np.arange(0, 1.01, 0.1))
plt.yticks(np.arange(0, 1.01, 0.1))
plt.title('Manually Drawing the Grids ')

# Draw grid lines for every third point on the x-axis
for pt in np.arange(0, 1.01, 0.3):
   plt.axvline(pt, lw=0.5, color='black', alpha=0.5)

# Show the plot
plt.show()

执行上述代码,我们将得到以下输出 −

grids ex4

Hiding the gridlines

可以通过向 grid() 函数指定布尔值 False 来隐藏或删除绘图中的网格线。

Example

以下是一个隐藏绘图的网格线和轴(X 轴和 Y 轴)的示例。

import numpy as np
import matplotlib.pyplot as plt

#  Create a figure
fig = plt.figure(figsize=(7, 4))

# Generate data
x = np.linspace(-10, 10, 50)
y = np.sin(x)

# Plot horizontal line
plt.axhline(y=0, c="green", linestyle="dashdot", label="y=0")

# Plot sine curve
plt.plot(x, y, c="red", lw=5, linestyle="dashdot", label="y=sin(x)")

# Hide gridlines
plt.grid(False)

# Hide axes
plt.axis('off')

# Add legend
plt.legend()

# Show plot
plt.show()

执行上述代码时,您将获得以下输出 -

grids ex5

Gridlines Across The Subplots

在多个子图中比较数据时,跨所有子图绘制网格线很有用,以在绘图之间保持可视比较。

Example

以下是一个演示如何跨子图绘制网格线的示例。

import matplotlib.pyplot as plt

# Data
d = [1, 2, 3, 4, 5, 6, 7, 8, 9]
f = [0, 1, 0, 0, 1, 0, 1, 1, 0]

# Create figure and subplots
fig = plt.figure(figsize=(7,4))
fig.set_size_inches(30, 10)
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

# Plot data on subplots
ax1.plot(d, marker='.', color='b', label="1 row")

# Draw grid lines behind bar graph
ax2.bar(range(len(d)), d, color='red', alpha=0.5)

# Enable grids on both subplots
ax1.grid()
ax2.grid()

# Display the plot
plt.show()

执行上述代码时,您将获得以下输出 -

grids ex6