Я использую matplotlib 1.15.1 и пытаюсь генерировать диаграммы рассеяния следующим образом:
Эллипсы имеют фиксированный размер и нарисованы с координатами центра, шириной, высотой и углом (предоставленным извне): я понятия не имею, каковы их уравнения.
g_ell_center = (0.8882, 0.8882)
g_ell_width = 0.36401857095483
g_ell_height = 0.16928136341606
g_ellipse = patches.Ellipse(g_ell_center, g_ell_width, g_ell_height, angle=angle, fill=False, edgecolor='green', linewidth=2)
Эти эллипсы должны отмечать нормальные и полунормальные данные на моем графике. Затем у меня есть массив из ~ 500 точек, которые должны быть окрашены в соответствии с эллипсом, которому они принадлежат. Поэтому я попытался проверить каждую точку с помощью метода contains_point:
colors_array = []
colors_scheme = ['green', 'yellow', 'black']
for point in points_array:
if g_ellipse.contains_point(point, radius=0):
colors_array.append(0)
elif y_ellipse.contains_point(point, radius=0):
colors_array.append(1)
else:
colors_array.append(2)
Наконец, набираются точки:
plt.scatter(x_array, y_array, s=10, c=[colors_scheme[x] for x in colors_array], edgecolor="k", linewidths=0.3)
Но contains_point работает очень медленно! Это работало 5 минут для 300-точечной скаттерограммы, и мне приходится генерировать их тысячи параллельно. Может быть, есть более быстрый подход? P.S. Весь проект привязан к matplotlib, я не могу использовать другие библиотеки.