必须指向二维图形(x,y)坐标网络x python

必须指向二维图形(x,y)坐标网络x python,python,matplotlib,networkx,Python,Matplotlib,Networkx,我从空间数据库中获取信息,这些值类似于线字符串(空间)格式,我需要将这些信息添加到networkx图形中,以后需要在matplot库中绘制图形 我已经写了这个代码 cursor.execute("SELECT AsText(roadstring) FROM road1") for row in cursor.fetchall(): a=row[0][12:-2] a=str(a) a=a.split(",") for i in a: i=i.spl

我从空间数据库中获取信息,这些值类似于线字符串(空间)格式,我需要将这些信息添加到networkx图形中,以后需要在matplot库中绘制图形 我已经写了这个代码

cursor.execute("SELECT AsText(roadstring) FROM road1")
for row in cursor.fetchall():
    a=row[0][12:-2]
    a=str(a)
    a=a.split(",")
    for i in a:
        i=i.split(" ")
        i[0]=float(i[0])
        i[1]=float(i[1])
        weig=abs(i[0]-i[1])
        G.add_node((i[0],i[1]))
我无法获得如何为道路(x1,y1)到(x2,y2)添加二维边,甚至我需要为这些边添加权重以计算它们之间的距离 有什么建议吗

每条道路的线串如下
643715.2022499149.0506 643752.6152354524499089.86084203 643773.60382499056.6558 643773.738786092499056.44011079 643793.201624822499025.34111554 643813.5594326822498992.81212045 643826.65632498971.8852

我收到这个错误我安装了matplotlib我试图复制你的代码

回溯(最近一次调用):文件“D:\python\gis\new.py”,第行 2,在 从matplotlib导入pyplot作为plt文件“C:\Python27\lib\site packages\matplotlib\uuuu init\uuuu.py”,第133行,在 从matplotlib.rcsetup导入(默认参数,文件“C:\Python27\lib\site packages\matplotlib\rcsetup.py”,第19行,在 从matplotlib.colors导入类似于文件“C:\Python27\lib\site packages\matplotlib\colors.py”,第54行,在 将matplotlib.cbook作为cbook文件“C:\Python27\lib\site packages\matplotlib\cbook.py”导入,位于中的第15行 导入新文件“D:\python\gis\new.py”,第2行,在 从matplotlib导入pyplot作为plt文件“C:\Python27\lib\site packages\matplotlib\pyplot.py”,第20行,在 从matplotlib导入_pylab_helpers,交互式导入错误:无法导入名称交互式


我不完全确定你想要完成什么,但我是这样解释的 它

将道路定义为沿道路的坐标,并希望绘制这些坐标 坐标作为节点,它们之间的道路作为边。您还需要边 权重是两个节点之间的距离

通过保存上一个节点并使用毕达哥拉斯定理来计算距离,可以很容易地实现这一点 我是如何做到的:

将networkx导入为nx
从matplotlib导入pyplot作为plt
输入数学
G=nx.Graph()
行='643715.2022499149.0506 643752.61523545252499089.86084203'+\
'643773.6038,2499056.6558 643773.73878609,2499056.44011079 ' +\
'643793.20162482,2499025.34111554 643813.55943268,2498992.81212045 ' +\
'643826.6563,2498971.8852'
a=行分割(“”)
#保存上一个节点以计算距离
上一点=无
#将位置保存在字典中以便能够绘制
#节点位于正确的位置
pos={}
对于我来说,在一个:
cur_point=tuple([float(x)表示i.split(','))中的x)
断言len(cur_点)==2
如果上一点不是无:
#使用勾股线计算节点之间的距离
#定理
b=当前点[1]-上一点[1]
c=当前点[0]-上一点[0]
a=数学sqrt(b**2+c**2)
G.添加边缘(当前点、上一点、权重=a)
G.添加节点(当前点)
位置[当前点]=当前点
上一点=当前点
nx.图纸(G,位置=位置)
plt.savefig('roads.png'))
在本例中,我假设节点位置和每个节点之间有一个空格 位置的x和y坐标用逗号分隔,但很容易更改。上面的代码将输出如下内容:


这将使节点处于“正确”的位置,但如果道路长度存在较大差异,可能会导致一些问题。在上面的示例中,您可以看到两个节点或多或少位于彼此的顶部。但这是一个不同的问题。

我不完全确定您想要实现什么,但下面是我的解释 它

将道路定义为沿道路的坐标,并希望绘制这些坐标 坐标作为节点,它们之间的道路作为边。您还需要边 权重是两个节点之间的距离

通过保存上一个节点并使用毕达哥拉斯定理来计算距离,可以很容易地实现这一点 我是如何做到的:

将networkx导入为nx
从matplotlib导入pyplot作为plt
输入数学
G=nx.Graph()
行='643715.2022499149.0506 643752.61523545252499089.86084203'+\
'643773.6038,2499056.6558 643773.73878609,2499056.44011079 ' +\
'643793.20162482,2499025.34111554 643813.55943268,2498992.81212045 ' +\
'643826.6563,2498971.8852'
a=行分割(“”)
#保存上一个节点以计算距离
上一点=无
#将位置保存在字典中以便能够绘制
#节点位于正确的位置
pos={}
对于我来说,在一个:
cur_point=tuple([float(x)表示i.split(','))中的x)
断言len(cur_点)==2
如果上一点不是无:
#使用勾股线计算节点之间的距离
#定理
b=当前点[1]-上一点[1]
c=当前点[0]-上一点[0]
a=数学sqrt(b**2+c**2)
G.添加边缘(当前点、上一点、权重=a)
G.添加节点(当前点)
位置[当前点]=当前点
上一点=当前点
nx.图纸(G,位置=位置)
plt.savefig('roads.png'))
在本例中,我假设节点位置和每个节点之间有一个空格 位置的x和y坐标用逗号分隔,但很容易更改。上面的代码将输出如下内容:


这将使节点处于“正确”位置位置,但如果道路长度存在较大差异,可能会导致一些问题。在上面的示例中,您可以看到两个节点或多或少相互重叠。但这是一个不同的问题。

如果您能提供一个您试图解析的文本示例--“AsText(roadstring)”。如果您能提供一个您试图解析的文本示例--“AsText(roadstring)”,这将非常有用。只需一句注释:您可以从
b中删除
abs()
调用