Python & matplotlib - изменение цвета отдельных точек - PullRequest
0 голосов
/ 26 мая 2020

Я хочу изменить цвет выбранных отдельных точек графика после того, как график был нарисован. Вот пример, который у меня работает, когда при нажатии меняются все точки. Я ищу, чтобы щелкнуть точку и изменить цвета c определенных точек. Как связать отдельные точки и их цвета?

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')

line, = ax.plot(np.random.rand(5), 'o', picker=5)  # 5 points tolerance

def onpick(event):
    thisline = event.artist
    xdata = thisline.get_xdata()
    ydata = thisline.get_ydata()
    ind = event.ind
    points = tuple(zip(xdata[ind], ydata[ind]))
    print('onpick points:', points,' ind:',ind)
    #if ind == 0:
    thisline.set_color('orange')
    fig.canvas.draw_idle()

fig.canvas.mpl_connect('pick_event', onpick)
plt.show()

color example

1 Ответ

0 голосов
/ 28 мая 2020

В этом случае вам нужно, чтобы ваш художник был каждой точкой, а не коллекцией, потому что вы хотите, чтобы они вели себя отдельно. Таким образом, вы можете перебирать все точки и строить много линий по одной. Таким образом, изменение цвета графика повлияет только на выбранный участок. Пример:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import rand

# simple picking lines
def onpick1(event):
    thisline = event.artist #Get the clicked line OR line collection
    thisline._color = '#DC143C' #Set to new color, in this case must be hsv
    thisline._axes.figure.canvas.draw() #update the plot
    thisline._axes.figure.canvas.flush_events()
fig, ax1 = plt.subplots()
data = rand(10, 2) #Random points for demonstration
for data_point in data:
    line, = ax1.plot(data_point[0], data_point[1], 'o', picker=2, c='yellow')  #2 points tolerance
fig.canvas.mpl_connect('pick_event', onpick1)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...