Matplotlib - 多光标



简介

Matplotlib 没有专门的多光标小部件。但是,Matplotlib 提供了光标小部件,可用于向绘图添加光标,以显示特定位置的信息。此外,matplotlib.widgets 模块提供了一个名为MultiCursor 的工具,允许我们在单个绘图中使用多个光标线。这对于比较 x 轴上不同点的值很有用。

让我们探讨如何在 Matplotlib 中使用 MultiCursor 工具以及光标小部件,并讨论其功能、实现和潜在用例。

MultiCursor 的功能

以下是 Multicursor 小部件的功能。

多个光标 - Matplotlib 中的MultiCursor 工具允许我们在单个绘图中添加多个光标线。每个光标线对应一组特定的轴。

光标之间的协调 - 光标是链接的,即当与其中一个交互时,它们会一起移动。这有助于轻松比较不同轴上的数据点。

可自定义的外观 - 可以根据我们的偏好自定义光标的外观,例如线条颜色和线型。

动态数据显示 - 当我们沿着 x 轴移动光标时,通过提供实时信息,动态显示光标位置处的相应 y 值。

基本光标示例

这是一个演示光标类用法的基本示例。

示例

import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
import numpy as np
# Generating sample data
x = np.linspace(0, 10, 100)
y = np.sin(x)
# Creating a plot
fig, ax = plt.subplots()
line, = ax.plot(x, y, label='Sine Wave')
# Adding a cursor to the plot
cursor = Cursor(ax, horizOn=True, vertOn=True, useblit=True, color='red', linewidth=1)
# Displaying the plot
plt.show()

输出

Basic Multicursor

使用 mplcursors 实现多光标

要在 Matplotlib 中实现多光标,我们可以使用mplcursors 包,它提供了额外的光标功能。我们可以使用以下代码行安装mplcursors 包。

示例

pip install mplcursors

输出

Collecting mplcursors
   Downloading mplcursors-0.5.3.tar.gz (88 kB)
      -------------------------------------- 88.8/88.8 kB 557.3 kB/s eta 0:00:00
   Installing build dependencies: started
   Installing build dependencies: finished with status 'done'
   Getting requirements to build wheel: started
   Getting requirements to build wheel: finished with status 'done'
   Installing backend dependencies: started
   Installing backend dependencies: finished with status 'done'
   Preparing metadata (pyproject.toml): started
   Preparing metadata (pyproject.toml): finished with status 'done'

mplcursors 的用法

现在让我们探索一个使用mplcursors 在 Matplotlib 中创建多光标的示例。

示例

import matplotlib.pyplot as plt
import mplcursors
import numpy as np
# Generate sample data
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# Create subplots
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))
# Plot data on the first subplot
ax1.plot(x, y1, label='Sin(x)')
ax1.set_ylabel('Amplitude')
ax1.legend()
# Plot data on the second subplot
ax2.plot(x, y2, label='Cos(x)')
ax2.set_xlabel('x')
ax2.set_ylabel('Amplitude')
ax2.legend()
# Enable multicursor on both subplots
mplcursors.cursor(hover=True, multiple=True)
# Display the plot
plt.show()

输出

Using MPL Cursor

扩展到多光标

要将此概念扩展到真正多光标的场景(其中多个光标独立移动),我们需要为每条线或数据源创建光标类的单独实例,并相应地更新信息。

多光标的用例

以下是多光标小部件使用用例。

比较分析 - 多光标在比较不同绘图之间的对应数据点时非常有用,这有助于可视化关系。

时间序列探索 - 对于时间序列数据,多光标允许同时检查多个时间序列中特定时间点处的数值。

交互式数据探索 - 多光标通过允许用户探索不同维度的数据点来增强数据可视化的交互性。

相关性分析 - 在研究两个或多个变量之间的相关性时,多光标有助于识别模式和相关性。

广告