2017-05-03 34 views
1

我想從圖中選取並繪製點,並在數組中存儲它們的座標。那可能嗎?如果是的話,你可以幫助引導我,謝謝你的幫助。事件處理matplotlip python

我有這樣的例子,但它是畫線:

from matplotlib import pyplot as plt 

class LineBuilder: 
    def __init__(self, line): 
     self.line = line 
     self.xs = list(line.get_xdata()) 
     self.ys = list(line.get_ydata()) 
     self.cid = line.figure.canvas.mpl_connect('button_press_event', self) 

    def __call__(self, event): 
     print('click', event) 
     if event.inaxes!=self.line.axes: return 
     self.xs.append(event.xdata) 
     self.ys.append(event.ydata) 
     self.line.set_data(self.xs, self.ys) 
     self.line.figure.canvas.draw() 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_title('click to build line segments') 
line, = ax.plot([0], [0]) # empty line 
linebuilder = LineBuilder(line) 
plt.show() 

回答

0

首先,爲了吸引點,而不是一條線,你需要定義一個標記,可選擇性地開啓線斷:

line, = ax.plot([0], [0], marker="o", linestyle="") 

座標已存儲在陣列LineBuilder.xsLineBuilder.xs中,因此您可以將它們打印出來。

完整的示例:

from matplotlib import pyplot as plt 

class LineBuilder: 
    def __init__(self, line): 
     self.line = line 
     self.xs = list(line.get_xdata()) 
     self.ys = list(line.get_ydata()) 
     self.cid = line.figure.canvas.mpl_connect('button_press_event', self) 

    def __call__(self, event): 
     if event.inaxes!=self.line.axes: return 
     self.xs.append(event.xdata) 
     self.ys.append(event.ydata) 
     self.line.set_data(self.xs, self.ys) 
     self.line.figure.canvas.draw_idle() 
     print(self.xs) 
     print(self.ys) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_title('click to build line segments') 
line, = ax.plot([0], [0], marker="o", linestyle="") 
linebuilder = LineBuilder(line) 
plt.show() 
+0

感謝你,我正在尋找:) –

+0

大,在這種情況下,你可能會[接受](https://meta.stackexchange.com/questions/5234/如何接受答案)答案。您可能還想參加[旅遊]瞭解SO的工作原理。 – ImportanceOfBeingErnest