Хорошо, у нас есть строка:
import networkx as nx
import re
a = """MULTILINESTRING (
(0 0, 0 20),
(20 0, 20 20),
(7.49080237694725 11.97316968394073, 5.67208473076472 5.229834926470677),
(19.01428612819832 3.12037280884873, 25.96681259449994 4.024633854021577),
(14.6398788362281 3.119890406724053, 21.51766222234933 1.803845175041164)
)"""
Сначала мы строим регулярное выражение для извлечения всех координат из строки:
REGEX = re.compile(r'\((?P<x1>[\d\.]+) (?P<y1>[\d\.]+), (?P<x2>[\d\.]+) (?P<y2>[\d\.]+)\)')
raw_coords = REGEX.findall(a)
Мы извлекли строки вместо поплавков. Более того, они не в формате, совместимом с Networkx. Поэтому мы переформатируем их:
coords = [
[(float(c[0]), float(c[1])), (float(c[2]), float(c[3]))]
for c in raw_coords
]
Создайте график и заполните его нашими ребрами (он автоматически создаст узлы с координатами):
G = nx.DiGraph()
G.add_edges_from(coords)
Создать диктант позиции (необходим для nx.draw
):
pos = {n: n for n in G.nodes}
Создать ярлык диктовку (для красивого рисунка):
labels = {n: '({:.2f}, {:.2f})'.format(n[0], n[1]) for n in G.nodes}
И нарисуйте окончательный график:
nx.draw(
G,
pos=pos,
labels=labels
)
Вот оно: