Matplotlib 套索演示

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,你将学习如何使用 Matplotlib 库创建一个交互式绘图,该绘图允许用户使用套索工具选择一组点。你还将学习如何使用回调函数来更改所选点的颜色。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

首先,导入本实验所需的库。我们将使用 matplotlib 创建绘图,并使用 numpy 生成随机数据。

import matplotlib.pyplot as plt
import numpy as np

创建套索管理器类

接下来,创建用于处理套索功能的 LassoManager 类。__init__ 方法初始化绘图和集合对象。callback 方法更改所选点的颜色,on_presson_release 方法处理鼠标事件。

class LassoManager:
    def __init__(self, ax, data):
        ## 一个点是否被选中的信息存储在集合的数组中(0 = 外部,1 = 内部),然后通过颜色映射为蓝色(外部)和红色(内部)。
        self.collection = RegularPolyCollection(
            6, sizes=(100,), offset_transform=ax.transData,
            offsets=data, array=np.zeros(len(data)),
            clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
        ax.add_collection(self.collection)
        canvas = ax.figure.canvas
        canvas.mpl_connect('button_press_event', self.on_press)
        canvas.mpl_connect('button_release_event', self.on_release)

    def callback(self, verts):
        data = self.collection.get_offsets()
        self.collection.set_array(path.Path(verts).contains_points(data))
        canvas = self.collection.figure.canvas
        canvas.draw_idle()
        del self.lasso

    def on_press(self, event):
        canvas = self.collection.figure.canvas
        if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
            return
        self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
        canvas.widgetlock(self.lasso)  ## 获取对小部件绘图的锁定

    def on_release(self, event):
        canvas = self.collection.figure.canvas
        if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
            canvas.widgetlock.release(self.lasso)

创建绘图

现在,使用 LassoManager 类创建一个交互式绘图。np.random.rand 函数生成将被绘制的随机数据点。

if __name__ == '__main__':
    np.random.seed(19680801)
    ax = plt.figure().add_subplot(
        xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
    manager = LassoManager(ax, np.random.rand(100, 2))
    plt.show()

总结

在本实验中,你学习了如何使用 Matplotlib 创建一个交互式绘图,该绘图允许用户使用套索工具选择一组点。你还学习了如何使用回调函数来更改所选点的颜色。此功能可以扩展到其他需要交互式数据选择的项目中。