Python中的 matplotlib.lines.VertexSelector 类
matplotlib.lines.VertexSelector类属于matplotlib.lines模块。 matplotlib.lines 模块包含所有可以用各种线型、标记和颜色绘制的二维线类。 matplotlib.lines.VertexSelector类用于管理回调,这些回调维护 matplotlib.lines.Line2D 的选定顶点列表。 process_selected()函数被选择的派生类覆盖。
Syntax: class matplotlib.lines.VertexSelector(line)
Parameter:
- lines: These represent the lines that are defined for the plotting.
Methods of the class:
- onpick(self, event): The selected set of indices gets updated when the line is picked using this method.
- process_selected(self, ind, xs, ys): By default it does the implementation of “do nothing” of the process_selected() method. The ‘ind’ represents the indices of the selected vertices whereas ‘xs’ and ‘ys’ are the coordinates of the selected vertices.
示例 #1:
Python3
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.lines as lines
# class for highlighting selected area
class Highlighter(lines.VertexSelector):
# constructor for the highlighter class
def __init__(self, line, fmt ='ro', **kwargs):
lines.VertexSelector.__init__(self, line)
self.markers, = self.axes.plot([], [], fmt, **kwargs)
# helper function process selected area and plot graph accordingly
def process_selected(self, ind, xs, ys):
self.markers.set_data(xs, ys)
self.canvas.draw()
figure, ax = plt.subplots()
x_axis, y_axis = np.random.rand(2, 30)
line, = ax.plot(x_axis, y_axis, 'bs-', picker = 5)
selector = Highlighter(line)
plt.show()
Python3
import matplotlib.pyplot as plt
import matplotlib.lines as lines
from matplotlib.collections import PathCollection
lines.VertexSelector
# class for plot clicked area
class dragged_lines:
# constructor for the dragged_lines class
def __init__(self, ax):
self.ax = ax
self.c = ax.get_figure().canvas
self.line = lines.Line2D(x, y, picker = 5, marker ='o',
markerfacecolor ='g', color ='y')
self.ax.add_line(self.line)
self.c.draw_idle()
self.sid = self.c.mpl_connect('pick_event', self.lineclicker)
def lineclicker(self, event):
if event.artist:
print("line selected ", event.artist)
self.follower = self.c.mpl_connect("motion_notify_event",
self.mouse_follower)
self.releaser = self.c.mpl_connect("button_press_event",
self.release_after_click)
def mouse_follower(self, event):
self.line.set_data([event.xdata, event.ydata])
self.c.draw_idle()
def release_after_click(self, event):
data = self.line.get_data()
print(data)
self.c.mpl_disconnect(self.releaser)
self.c.mpl_disconnect(self.follower)
figure = plt.figure()
axes = figure.add_subplot(111)
x_axis, y_axis = [2, 4, 5, 7], [8, 6, 12, 9]
axes.plot(x_axis, y_axis)
Vline = dragged_lines(axes)
plt.show()
输出:
示例 2:
Python3
import matplotlib.pyplot as plt
import matplotlib.lines as lines
from matplotlib.collections import PathCollection
lines.VertexSelector
# class for plot clicked area
class dragged_lines:
# constructor for the dragged_lines class
def __init__(self, ax):
self.ax = ax
self.c = ax.get_figure().canvas
self.line = lines.Line2D(x, y, picker = 5, marker ='o',
markerfacecolor ='g', color ='y')
self.ax.add_line(self.line)
self.c.draw_idle()
self.sid = self.c.mpl_connect('pick_event', self.lineclicker)
def lineclicker(self, event):
if event.artist:
print("line selected ", event.artist)
self.follower = self.c.mpl_connect("motion_notify_event",
self.mouse_follower)
self.releaser = self.c.mpl_connect("button_press_event",
self.release_after_click)
def mouse_follower(self, event):
self.line.set_data([event.xdata, event.ydata])
self.c.draw_idle()
def release_after_click(self, event):
data = self.line.get_data()
print(data)
self.c.mpl_disconnect(self.releaser)
self.c.mpl_disconnect(self.follower)
figure = plt.figure()
axes = figure.add_subplot(111)
x_axis, y_axis = [2, 4, 5, 7], [8, 6, 12, 9]
axes.plot(x_axis, y_axis)
Vline = dragged_lines(axes)
plt.show()
输出: