在R中,有一个函数locator
就像Matlab的ginput
,你可以用鼠标点击图形并选择任何x,y坐标。此外,还有一个名为identify(x,y)
的函数,如果你给它绘制了一组你已经绘制的点x,y,然后点击图,它将返回最接近的x,y点的索引。 (在可调节的公差范围内)到您选择的位置(或多个索引,如果选择了多个点)。 Matplotlib中是否有这样的功能?
答案 0 :(得分:15)
您可能想要使用pick event:
fig = figure()
ax1 = fig.add_subplot(111)
ax1.set_title('custom picker for line data')
line, = ax1.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)
由选择器参数设置的容差:
line, = ax1.plot(rand(100), 'o', picker=5) # 5 points tolerance
答案 1 :(得分:6)
from __future__ import print_function
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand
if 1:
fig, ax = plt.subplots()
ax.set_title('click on points', picker=True)
ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax.plot(rand(100), 'o', picker=5)
def onpick1(event):
if isinstance(event.artist, Line2D):
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
print 'X='+str(np.take(xdata, ind)[0]) # Print X point
print 'Y='+str(np.take(ydata, ind)[0]) # Print Y point
fig.canvas.mpl_connect('pick_event', onpick1)
答案 2 :(得分:1)
哇,已经过去了很多年! 现在matplotlib
还支持ginput
函数,该函数具有与Matlab几乎相同的API。因此,无需再通过mpl-connect进行破解! (https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.ginput.html)例如,
plt.ginput(4)
将允许用户选择4个点。