আপনি যদি বড় পয়েন্টের সাথে কাজ করে থাকেন তবে আমি আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি CKDtrees
:
import matplotlib.pyplot as plt
import numpy as np
import scipy.spatial
points = np.column_stack([np.random.rand(50), np.random.rand(50)])
fig, ax = plt.subplots()
coll = ax.scatter(points[:,0], points[:,1])
ckdtree = scipy.spatial.cKDTree(points)
আমি kpie's
উত্তর এখানে সামান্য বিট। একবার ckdtree
তৈরি হয়ে গেলে আপনি তাত্ক্ষণিক নিকটস্থ পয়েন্টগুলি সনাক্ত করতে পারেন এবং অল্প চেষ্টা করে এগুলি সম্পর্কে বিভিন্ন ধরণের তথ্য:
def closest_point_distance(ckdtree, x, y):
#returns distance to closest point
return ckdtree.query([x, y])[0]
def closest_point_id(ckdtree, x, y):
#returns index of closest point
return ckdtree.query([x, y])[1]
def closest_point_coords(ckdtree, x, y):
# returns coordinates of closest point
return ckdtree.data[closest_point_id(ckdtree, x, y)]
# ckdtree.data is the same as points
কার্সার অবস্থানের ইন্টারেক্টিভ প্রদর্শন।
আপনি যদি ন্যাভিগেশন সরঞ্জামদণ্ডে নিকটতম পয়েন্টের স্থানাঙ্ক প্রদর্শন করতে চান:
def val_shower(ckdtree):
#formatter of coordinates displayed on Navigation Bar
return lambda x, y: '[x = {}, y = {}]'.format(*closest_point_coords(ckdtree, x, y))
plt.gca().format_coord = val_shower(ckdtree)
plt.show()
ইভেন্ট ব্যবহার করে।
আপনি যদি অন্য ধরণের ইন্টারেক্টিভিটি চান তবে আপনি ইভেন্টগুলি ব্যবহার করতে পারেন:
def onclick(event):
if event.inaxes is not None:
print(closest_point_coords(ckdtree, event.xdata, event.ydata))
fig.canvas.mpl_connect('motion_notify_event', onclick)
plt.show()