import matplotlib.pyplot, так как plt plt.scatter нужны массивы для x, y и c. Массиву c нужны значения от 0 до 1.
scatter
также требуется цветовая карта, например, cmap='viridis'
или cmap='Blues'
.
Вот упрощенный пример:
c = [0.0, 0.1, 0.2, 1.2, 2.9]
c = [x/3.0 for x in c] # make sure values are between 0 and 1
points = [(0,1), (1,2), (2.5, 1.5), (0.5, 1.7), (1.1, 1.2) ]
pnt_x = [pnt[0] for pnt in points]
pnt_y = [pnt[1] for pnt in points]
plt.scatter(pnt_x, pnt_y, c=c, cmap='viridis', alpha = 0.5)
plt.show()
Я думаю, что адаптация его к вашему формату и добавление утверждений, чтобы убедиться, что все массивы имеют одинаковую длину, будет выглядеть так:
c = [x/3.0 for x in df_result_local['times'] ]
pnt_x = [pnt.x for pnt in df_result_local['Points']]
pnt_y = [pnt.y for pnt in df_result_local['Points']]
assert len(c) == len(pnt_x), "same number of colors as points needed"
assert len(pnt_x) == len(pnt_y), "same number of x as y coordinates needed"
plt.scatter(pnt_x, pnt_y, c=c, cmap='viridis', alpha = 0.5)
Как отмечено в комментариях, деление надиапазон 0..1 не является строго необходимым. Если вы этого не сделаете, matplotlib нормализует значения. Будьте осторожны с этой автоматической нормализацией, так как она по умолчанию нормализует самое низкое значение до 0, а самое высокое до 1. Если, например, один раз вы строите график только со значениями от 0 до 1,5, и позже вы хотите сравнить с графиком, где у вас есть значенияот 0 до 3, соответствующие точки не будут иметь одинаковый цвет.