Как упоминалось в комментариях, ошибка, которую вы получаете, заключается в том, что вы передаете неправильный ввод в Voronoi
, пожалуйста, прочитайте документацию
Относительно того, что вы пытаетесь сделать и предполагая, что data
, который вы получаете от data, addr = sock.recvfrom(1024)
, похож на [b' 0,2036377.2,04291.', b' 0,2027879.2,040747.']
, вам нужно обратиться к следующим пунктам:
- декодировать байты в строку
- extract координаты, используя, например, регулярное выражение
- , преобразуют строковое представление координат в
float
- , организуют структуру данных для создания
Voronoi
диаграммы
Код, который у вас есть, адресован большинству из этих точек, но он не структурирует данные как входные данные для диаграммы Voronoi
.
Код ниже адресован всем точкам и создаст диаграмму Voronoi
для вас:
import re
from scipy.spatial import Voronoi, voronoi_plot_2d
import matplotlib.pyplot as plt
import doctest
doctest.testmod() # used to test the docstring
# compile the regular expression used to parse the input data
regex = re.compile(' (\d+,\d+)\.(\d+,\d+)\.')
def parse_data(data):
"""
parse a list of strings with x, y coordinates
>>> data = [b' 0,2036377.2,04291.', b' 0,2027879.2,040747.']
>>> parse_data(data)
[[0.2036377, 2.04291], [0.2027879, 2.040747]]
"""
proc_data = []
for i in data:
m = regex.match(i.decode('utf-8')) # decode the bytes and match the regex
if m:
# parse the coordinates and organise the data structure
proc_data += [[float(m.group(1).replace(',','.')),
float(m.group(2).replace(',','.'))]]
return proc_data
data = [b' 0,2036377.2,04291.', b' 0,2027879.2,040747.',
b' 0,2018921.2,037455.', b' 0,2010467.2,034439.',
b' 0,2004007.2,031721.', b' 0,1996321.2,027795.',
b' 0,1989551.2,023898.', b' 0,1983429.2,020666.',
b' 0,1978466.2,017263.']
data = parse_data(data)
vor = Voronoi(data) # create the Voronoi diagram with correct input data
voronoi_plot_2d(vor)
plt.show()
Результат следующий: