Я пытаюсь раскрасить диаграмму Вороного, созданную с помощью scipy.spatial.Voronoi
. Вот мой код:Colorize Voronoi Diagram
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
# make up data points
points = np.random.rand(15,2)
# compute Voronoi tesselation
vor = Voronoi(points)
# plot
voronoi_plot_2d(vor)
# colorize
for region in vor.regions:
if not -1 in region:
polygon = [vor.vertices[i] for i in region]
plt.fill(*zip(*polygon))
plt.show()
Полученное изображение:
Как вы можете увидеть некоторые из областей Вороного на границе изображения не окрашиваются. Это связано с тем, что некоторые индексы к вершинам Вороного для этих областей установлены на -1
, то есть для тех вершин за пределами диаграммы Вороного. Согласно документации:
регионов: (список списка Интс, формы (nregions, *)) Индексы вершин Вороным, образующим каждой Вороной области. -1 указывает вершину вне диаграммы Вороного.
Для того, чтобы раскрасить эти регионы, а также, я пытался просто удалить эту «внешнюю» вершину из многоугольника, но это не сработало. Я думаю, мне нужно заполнить некоторые пункты на границе области изображения, но я не могу понять, как достичь этого разумно.
Может ли кто-нибудь помочь?
Небольшая ошибка, возможно, не уверен, что это изменилось с более новой версией numpy, но выполнение '.ptp()' находит разницу между самым большим и наименьшим значением, тогда '.max()' ничего не делает. Я думаю, что вы хотите '.ptp (axis = 0) .max()'. –
Не знаю, читает ли кто-нибудь это, но какая точка линии: 'if v2 <0: v1, v2 = v2, v1' – Luca
Ничего. Теперь, когда я прочитал его правильно, нужно сделать так, чтобы конечная вершина всегда была v2. – Luca