Python/networkx:note属性的创建异常失败

2024-09-27 23:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到一种让我发疯的效果,我不明白: 我正在从一个6列SQL Server 2012数据库表(nodeID、string(Class)、float(xCoordinate)、float(yccoordinate)、stringZone、char(Reference))中获取数据,并希望使用networkx Python包创建这些实体的网络图。对我来说很重要的一点是,我确实有几个具有预定义坐标的网络节点,我想在一个节点之后保持固定,其余节点将使用Gephi进行布局。你知道吗

这是我的密码:

import pyodbc
import networkx as nx

dbConnection = pyodbc.connect('DB-Connection String')
dbCursor = dbConnection.cursor()

theGraph = nx.Graph()
theGraph.position={}
theGraph.deviceClass={}

queryStatement = "SELECT ComponentID, DeviceClass, CoordX, CoordY, AcceleratorZone, Reference FROM dbo.vComponentsWithZones WHERE Reference IN ('M','T')"
for dbRow in dbCursor.execute(queryStatement):
    nodeID = dbRow[0]
    theGraph.add_node(nodeID)

    deviceClass = dbRow[1]
    coordX = (dbRow[2] - 367421.373) / 100
    coordY = (dbRow[3] - 230238.784) / 100
    accelZone = dbRow[4]

    if coordX != None and coordY != None:
        print nodeID, coordX, coordY   <-------------------------
        theGraph.node[nodeID]["viz"] = {'position': {'x': coordX, 'y': coordY, 'z': 0}}

    if accelZone != None:
        theGraph.node[nodeID]["AccelZone"] = accelZone
    if dbRow[1] != None:
        theGraph.node[nodeID]["DeviceClass"] = deviceClass 

    if deviceClass == "Controls":
        theGraph.node[nodeID]["viz"] = {'color': {'r': "255", 'g': "0", 'b': "0", 'a': "1"}}
    elif deviceClass == "Magnet":
        theGraph.node[nodeID]["viz"] = {'color': {'r': "255", 'g': "200", 'b': "0", 'a': "1"}}
    elif deviceClass == "Vacuum":
        theGraph.node[nodeID]["viz"] = {'color': {'r': "0", 'g': "0", 'b': "255", 'a': "1"}}

queryStatement = "SELECT * FROM dbo.ComponentConnections"
for dbRow in dbCursor.execute(queryStatement):
    theGraph.add_edge(dbRow[0],dbRow[1], connectionTyp=dbRow[2])

dbConnection.close()

nx.write_gexf(theGraph,"cryringTopology.gexf")

一切似乎都很正常,从print语句的输出来看,一切似乎都很正常;我确实得到nodeID、coordX、coordY的值,只要数据库中有条目,程序就会对语句进行求值

if coordX != None and coordY != None:

正确执行其中的代码。你知道吗

Screenshot of print output

但是,GEXF文件的输出只为正确分配的坐标中的6个条目生成坐标,坐标应该是40-50左右。似乎“position”节点属性的创建在某些情况下失败了,我完全迷路了。你知道吗

有什么想法吗???你知道吗


Tags: nonenodeif节点referencenxviznodeid
1条回答
网友
1楼 · 发布于 2024-09-27 23:19:44

你在这条线上储存了什么

theGraph.node[nodeID]["viz"] = {'position': {'x': coordX, 'y': coordY, 'z': 0}}

被这些行覆盖

theGraph.node[nodeID]["viz"] = {'color': {'r': "255", 'g': "0", 'b': "0", 'a': "1"}}

相关问题 更多 >

    热门问题