matplotlib 처리 및 선택을 사용하여 드래그 가능한 라인 클래스를 만들려고합니다. 목표는 그래프에 다른 임계 값과 간격을 설정하는 것입니다. 여기 코드는 다음과 같습니다드래그 가능한 라인은 Matplotlib에서 서로 선택합니다.
import matplotlib.pyplot as plt
import matplotlib.lines as lines
import numpy as np
class draggable_lines:
def __init__(self, ax, kind, XorY):
self.ax = ax
self.c = ax.get_figure().canvas
self.o = kind
self.XorY = XorY
if kind == "h":
x = [-1, 1]
y = [XorY, XorY]
elif kind == "v":
x = [XorY, XorY]
y = [-1, 1]
else:
print("choose h or v line")
self.line = lines.Line2D(x, y, picker=5)
self.ax.add_line(self.line)
self.c.draw()
sid = self.c.mpl_connect('pick_event', self.clickonline)
# pick line when I select it
def clickonline(self, event):
self.active_line = event.artist
print("line selected ", event.artist)
self.follower = self.c.mpl_connect("motion_notify_event", self.followmouse)
self.releaser = self.c.mpl_connect("button_press_event", self.releaseonclick)
# The selected line must follow the mouse
def followmouse(self, event):
if self.o == "h":
self.line.set_ydata([event.ydata, event.ydata])
else:
self.line.set_xdata([event.xdata, event.xdata])
self.c.draw()
# release line on click
def releaseonclick(self, event):
if self.o == "h":
self.XorY = self.line.get_ydata()[0]
else:
self.XorY = self.line.get_xdata()[0]
print (self.XorY)
self.c.mpl_disconnect(self.releaser)
self.c.mpl_disconnect(self.follower)
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
Vline = draggable_lines(ax, "h", 0.5)
Tline = draggable_lines(ax, "v", 0.5)
Tline2 = draggable_lines(ax, "v", 0.1)
동작은 I (나는 줄을 놓으면 그것은 또한 선택을 통지하는 경우에도) 단 1 회선을 사용하는 경우 예상되는 것입니다.
한 줄 이상을 사용할 때 동시에 모두 선택합니다!
나는 이벤트 관리자 기능을 오해하고 있다고 생각하지만 다른 객체를 잘 이해할 수 없다 (나는 print("line selected ", event.artist)
에서 볼 수 있듯이) 자신과 다른 객체를 선택해야만한다!