Matplotlib - 矩形选择器
Matplotlib 是一个用于可视化的Python库。它提供了各种小部件,使数据的可视化变得简单。在某些情况下,需要选择图形的特定区域。对于这种交互性,Matplotlib 提供了 RectangleSelector 小部件。此小部件有助于选择给定轴的矩形区域。此外,它还提供了一种根据选择执行操作的方法。
RectangleSelector():选择给定轴的矩形区域。
Syntax: class matplotlib.widgets.RectangleSelector(ax, onselect, drawtype=’box’, minspanx=0, minspany=0, useblit=False, lineprops=None, rectprops=None, spancoords=’data’, button=None, maxdist=10, marker_props=None, interactive=False, state_modifier_keys=None)
参数:
- 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()
输出: