Вам необходимо сохранить все баллы для ваших разных участков и проверить с помощью event.artist
, на каком участке вы нажимаете в данный момент ( См. Этот вопрос )
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=5, ncols=3, sharex=True, sharey=True)
xlim = (0, 30)
ylim = (0, 15)
plt.xticks(np.arange(0, 15, 5))
plt.yticks(np.arange(0, 15, 5))
plt.xticks(np.arange(0, 30, 5))
plt.setp(axes, xlim=xlim, ylim=ylim)
points_list = [] ###
for i in range(0, 5, 1):
for j in range(0, 3, 1):
X_t = np.random.rand(10, 4) * 20
points_list.append(axes[i][j].scatter(X_t[:, 0], X_t[:, 1],
facecolors=["C0"] * len(X_t), edgecolors=["C0"] * len(X_t), picker=True)) ###
def onpick(event):
print(event.artist, X_t[event.ind], "clicked")
for points in points_list:
if event.artist == points: ###
points._facecolors[event.ind, :] = (1, 1, 0, 1)
points._edgecolors[event.ind, :] = (1, 0, 0, 1)
fig.canvas.draw()
fig.canvas.mpl_connect('pick_event', onpick)
plt.show()
Из чека event.artist == points
вы видите, вы можете использовать event.artist
напрямую вместо сохранения всех точек в списке:
def onpick(event):
print(event.artist, X_t[event.ind], "clicked")
event.artist._facecolors[event.ind, :] = (1, 1, 0, 1)
event.artist._edgecolors[event.ind, :] = (1, 0, 0, 1)
fig.canvas.draw()