我有一个字符串:
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)
)
我想画的意思是我想连接每对线对,比如说将(0 0, 0 20)
连接在一起,将(0 0)
连接到(0 20)
,依此类推。
我更喜欢一种for循环,而不是将它们分成不同的行并连接起来。 使用Networkx对我来说也很重要,因为稍后我要查找一些矩阵,例如相邻矩阵。
答案 0 :(得分:0)
好的,我们有一个字符串:
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}
创建标签dict(用于绘制精美图片):
labels = {n: '({:.2f}, {:.2f})'.format(n[0], n[1]) for n in G.nodes}
并绘制最终图形:
nx.draw(
G,
pos=pos,
labels=labels
)
这里是: