美文网首页
networkx画图给后台传参

networkx画图给后台传参

作者: 还是那个没头脑 | 来源:发表于2019-09-25 18:10 被阅读0次
    import networkx as nx
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    
    # 下两行图上显示中文
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    
    node_color = ['r']
    data = {'张三':
                {'校友': ['李一','李二','李三','李四'],
                 '同学': ['王一', '王二', '王三', '王四', '王五'],
                  '同事': ['马一', '马二', '马三', '马四', '马五', '马六']
                }
            }
    G = nx.Graph()
    for k, v in data.items():
        G.add_node(k, id='0001')
        for m, n in v.items():
            if m == '校友':
                node_color.extend(['b'] * len(n))
                for i in n:
                    G.add_node(i, id='0002')
                    G.add_edge(k, i, weight=0.1)
            elif m == '同学':
                node_color.extend(['b'] * len(n))
                for i in n:
                    G.add_node(i, id='0003')
                    G.add_edge(k, i, weight=0.5)
            else:
                node_color.extend(['b'] * len(n))
                for i in n:
                    G.add_node(i,id = '0003')
                    G.add_edge(k,i,weight=1.0)
    
    
    
    def on_press(event,relations):
        # print(event)
        # print('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
        #       (event.button, event.x, event.y, event.xdata, event.ydata))
        if event.button == 1:
            for k,v in relations.items():
                if all([v[0][0] <event.xdata <v[0][1],v[1][0]<event.ydata<v[1][1]]):
                    print(k)
                    print(G.node[k]['id'])
    
    
    pos = nx.spring_layout(G)
    
    po_annotation = []
    relations = {}
    for po in pos:
        print(po, pos[po])
        xy = [[pos[po][0] - 0.05, pos[po][0] + 0.05],
              [pos[po][1] - 0.05, pos[po][1] + 0.05]]
        relations[po] = xy
    
    
    
    fig.canvas.mpl_connect('button_press_event',lambda event:on_press(event,relations))
    
    nx.draw(G, pos,  with_labels=True,node_color=node_color, edge_color='b', node_size=1000)  # ,with_labels=True
    
    plt.show()
    

    相关文章

      网友评论

          本文标题:networkx画图给后台传参

          本文链接:https://www.haomeiwen.com/subject/socrdctx.html