python – 创建网络图

前端之家收集整理的这篇文章主要介绍了python – 创建网络图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以CSV格式设置的样本数据如下.

无向图具有90个节点,以数字{10,11,12 …. 99}
其边缘与权重的定义如下.

[样本数据]

node1 node2 weight
23     89    34.9  (i.e. there is an edge between node 23 and 89 with weight 34.9)
75     14    28.5
so on....

我想以网络形式表示.代表它的有效方法是什么(例如Gephi,networkx等).边缘厚度应代表边缘重量.

解决方法

如果你在Linux,并且假设你的csv文件看起来像这样(例如):
23;89;3.49
23;14;1.29
75;14;2.85
14;75;2.9
75;23;0.9
23;27;4.9

您可以使用此程序:

import os

def build_G(csv_file):

    #init graph dict
    g={}

    #here we open csv file
    with open(csv_file,'r') as f:
        cont=f.read()

    #here we get field content
    for line in cont.split('\n'):
        if line != '':

            fields=line.split(';')

            #build origin node
            if g.has_key(fields[0])==False:
                g[fields[0]]={}

            #build destination node         
            if g.has_key(fields[1])==False:
                g[fields[1]]={}

            #build edge origin>destination
            if g[fields[0]].has_key(fields[1])==False:
                g[fields[0]][fields[1]]=float(fields[2])

    return g

def main():

    #filename
    csv_file="mynode.csv"

    #build graph
    G=build_G(csv_file)

    #G is now a python dict
    #G={'27': {},'75': {'14': 2.85,'23': 0.9},'89': {},'14': {'75': 2.9},'23': {'27': 4.9,'89': 3.49,'14': 1.29}}


    #write to file
    f = open('dotgraph.txt','w')
    f.writelines('digraph G {\nnode [width=.3,height=.3,shape=octagon,style=filled,color=skyblue];\noverlap="false";\nrankdir="LR";\n')
    f.writelines

    for i in G:
        for j in G[i]:
            #get weight
            weight = G[i][j]
            s= '      '+ i
            s +=  ' -> ' +  j + ' [dir=none,label="' + str(G[i][j]) + '",penwidth='+str(weight)+',color=black]'
            if s!='      '+ i:
                s+=';\n'
                f.writelines(s)

    f.writelines('}')
    f.close()

    #generate graph image from graph text file
    os.system("dot -Tjpg -omyImage.jpg dotgraph.txt")

main()

我以前正在寻找一个有效的解决方案来构建复杂的图形,这是最简单的(没有任何python模块依赖)方法我发现.

以下是无向图的图像结果(使用dir = none):

猜你在找的Python相关文章