📜  Matplotlib - 矩形选择器

📅  最后修改于: 2022-05-13 01:55:20.610000             🧑  作者: Mango

Matplotlib - 矩形选择器

Matplotlib 是一个用于可视化的Python库。它提供了各种小部件,使数据的可视化变得简单。在某些情况下,需要选择图形的特定区域。对于这种交互性,Matplotlib 提供了 RectangleSelector 小部件。此小部件有助于选择给定轴的矩形区域。此外,它还提供了一种根据选择执行操作的方法。

RectangleSelector():选择给定轴的矩形区域。

参数:

  • ax:放置小部件的 matplotlib.axes.Axes 实例。
  • onselect:连接选择事件的函数。选择完成后,将调用相应的函数。 onselect函数将鼠标单击和鼠标释放事件作为参数。
  • drawtype:它指定如何显示选择。如果为“box”,则绘制完整的矩形框。如果为“line”,则绘制矩形的线。如果“无”,则不绘制任何内容。默认值为“框”。
  • 按钮:它提供可以触发矩形选择的鼠标按钮列表。默认情况下,允许使用所有按钮。
  • maxdist:以像素为单位的距离,在该距离内可以激活交互式工具句柄。默认值为 10。
  • 交互:它是一个布尔值,用于指定是否绘制一组句柄以与小部件交互。

特性:

  • center:提供绘制矩形的中心
  • 角:提供矩形的角从左下角开始,顺时针移动。
  • edge_centers:提供从左开始顺时针移动的矩形边缘的中点。
  • 范围:返回(xmin,xmax,ymin,ymax)。
  • 几何:返回一个包含矩形四个角(从左上角开始和结束)的 x 和 y 坐标的数组。数组形状为 (2, 5)。所有 x 坐标都可以使用 RectangleSelector.geometry[1, :] 获得,y 坐标可以使用 RectangleSelector.geometry[0, :] 获得。

方法:

  • draw_shape(self, extents):使用 (xmin, xmax, ymin, ymax) 值绘制矩形。

示例 1:

下面的程序演示了简单的 RectangleSelector 用于选择区域和缩放所选区域。

Python3
from matplotlib.widgets import RectangleSelector
import matplotlib.pyplot as plt
 
# Function to be executed after selection
def onselect_function(eclick, erelease):
   
    # Obtain (xmin, xmax, ymin, ymax) values
    # for rectangle selector box using extent attribute.
    extent = rect_selector.extents
    print("Extents: ", extent)
 
    # Zoom the selected part
    # Set xlim range for plot as xmin to xmax
    # of rectangle selector box.
    plt.xlim(extent[0], extent[1])
     
    # Set ylim range for plot as ymin to ymax
    # of rectangle selector box.
    plt.ylim(extent[2], extent[3])
 
# plot a line graph for data n
fig, ax = plt.subplots()
n = [4, 5, 6, 10, 12, 15, 20, 23, 24, 19]
ax.plot(n)
 
# Define a RectangleSelector at given axes ax.
# It calls a function named 'onselect_function'
# when the selection is completed.
# Rectangular box is drawn to show the selected region.
# Only left mouse button is allowed for doing selection.
rect_selector = RectangleSelector(
    ax, onselect_function, drawtype='box', button=[1])
 
# Display graph
plt.show()


输出: