简介
本实验将指导你如何使用 Matplotlib Span Selector 在轴上选择一个范围,并在另一个轴上绘制所选范围的详细视图。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到Notebook标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入所需库
首先,我们需要导入所需的库——numpy 和 matplotlib。
import numpy as np
import matplotlib.pyplot as plt
创建示例数据
我们现在将使用 numpy 创建一些用于绘图的示例数据。
## 为保证可重复性而固定随机数种子
np.random.seed(19680801)
x = np.arange(0.0, 5.0, 0.01)
y = np.sin(2 * np.pi * x) + 0.5 * np.random.randn(len(x))
创建图形和子图
我们现在将使用 matplotlib 创建一个包含两个子图的图形。
fig, (ax1, ax2) = plt.subplots(2, figsize=(8, 6))
在第一个子图上绘制数据
我们将在第一个子图上绘制示例数据。
ax1.plot(x, y)
ax1.set_ylim(-2, 2)
ax1.set_title('Press left mouse button and drag '
'to select a region in the top graph')
定义一个回调函数
我们将定义一个回调函数,当使用跨度选择器(Span Selector)选中一个范围时,该函数将会被调用。
def onselect(xmin, xmax):
indmin, indmax = np.searchsorted(x, (xmin, xmax))
indmax = min(len(x) - 1, indmax)
region_x = x[indmin:indmax]
region_y = y[indmin:indmax]
if len(region_x) >= 2:
line2.set_data(region_x, region_y)
ax2.set_xlim(region_x[0], region_x[-1])
ax2.set_ylim(region_y.min(), region_y.max())
fig.canvas.draw_idle()
创建一个跨度选择器
我们将使用 matplotlib.widgets.SpanSelector 创建一个跨度选择器对象。
span = SpanSelector(
ax1,
onselect,
"horizontal",
useblit=True,
props=dict(alpha=0.5, facecolor="tab:blue"),
interactive=True,
drag_from_anywhere=True
)
在第二个子图上绘制数据
我们将在第二个子图上绘制所选范围的详细视图。
line2, = ax2.plot([], [])
显示绘图
现在我们将使用 matplotlib.pyplot.show() 来显示绘图。
plt.show()
总结
在这个实验中,我们学习了如何使用 Matplotlib 的跨度选择器在一个轴上选择一个范围,并在另一个轴上绘制所选范围的详细视图。我们还学习了如何创建一个跨度选择器对象,并定义一个回调函数来处理所选范围。