В документации по matplotlib есть пример выбора легенды .Мы можем адаптировать его к случаю, когда сбор происходит по точечной диаграмме, и цвет должен измениться.
С этой целью мы создаем сборщик на легендарном исполнителе (прокси) и прикрепляем атрибут toggled
к значениюзнать, в каком из двух состояний находится художник (это проще, чем использовать get_color
из-за преобразования цветов в кортежи RGB внутри).
import matplotlib.pyplot as plt
x1 = [1,3,5,7,9]
x2 = [2,4,6,8,10]
fig, ax = plt.subplots()
line1 = ax.scatter(x1,x1,color = 'b',s = 50,label = 'x1')
line2 = ax.scatter(x2,x2,color = 'b',s = 50,label = 'x2')
leg = ax.legend(loc = 'upper left')
# we will set up a dict mapping legend line to orig line, and enable
# picking on the legend line
lines = [line1, line2]
lined = dict()
for legline, origline in zip(leg.legendHandles, lines):
legline.set_picker(5) # 5 pts tolerance
legline.toggled = False # create custom attribute to observe state
lined[legline] = origline
def onpick(event):
legline = event.artist
origline = lined[legline]
c = "b" if legline.toggled else "r"
legline.set_color(c)
origline.set_color(c)
fig.canvas.draw_idle()
legline.toggled = not legline.toggled
fig.canvas.mpl_connect('pick_event', onpick)
plt.show()