Example #1
0
def show_graph_with_labels(fname, adjacency_matrix, mylabels):
    def make_label_dict(labels):
        l = {}
        for i, label in enumerate(labels):
            l[i] = label
        return l

    gr = nx.Graph(adjacency_matrix)

    for k, v in make_label_dict(mylabels).items():
        gr.node[k]["label"] = v

    nx.draw(gr,
            node_color='#36C8FF',
            edge_color='#36C8FF',
            node_size=1,
            labels=make_label_dict(mylabels),
            with_labels=True)
    nx.write_gexf(gr, "graphlogMI.gexf")
    nx.relabel_gexf_graph(gr)
Example #2
0
def plotDegreeRatio(gexFile):
    '''plot the degree ratio from a supported gexFile'''
    #setup our digraph from a gexf (gephi) format #read_gexf
    DG = nx.DiGraph(nx.read_gexf(gexFile))
    
    #turn node labels into dictionary node keys
    DG = nx.relabel_gexf_graph(DG)
    
    #generate networkx friendly position format
    #dictionary keyed by node label with values being a float32 ndarray
    pos = dict()
    for i in range(1, len(DG.node)+1):
        xPos = DG.node[str(i)]['viz']['position']['x']
        yPos = DG.node[str(i)]['viz']['position']['y']
        pos[str(i)] = np.array([xPos,yPos])
    
    #get degree ratio (in to out) for color information
    inDeg = DG.in_degree()
    outDeg = DG.out_degree()
    
    degreeRatio = dict()
    #node labels start at 1
    for i in range(1,len(DG.node)+1):   
        #dont want to divide by zero, we'll handle this below
        if outDeg[str(i)] != 0:
            #degrees are ints so convert
            degreeRatio[str(i)] = float(inDeg[str(i)]) / float(outDeg[str(i)])
            #we're going to drop it to 1 when over 1    
            if degreeRatio[str(i)]>1:
                degreeRatio[str(i)]=1
        #in this case, we'll set +inf to 1
        elif inDeg[str(i)] > 0:
            degreeRatio[str(i)]=1
        else: #both were zero
            degreeRatio[str(i)]=0
        
    #draw!
    nx.draw_networkx_edges(DG,pos,nodelist=degreeRatio.keys(),alpha=0.05,
                           arrows=True)
    nx.draw_networkx_nodes(DG,pos,nodelist=degreeRatio.keys(),
                       node_size=20,
                       node_color= degreeRatio.values(),
                       cmap=plt.cm.jet)
    plt.show()
nx.draw_networkx_nodes(G, pos, node_size=[x * scaler for x in si])

# edges
mst = nx.minimum_spanning_edges(G, data=False)
nx.draw_networkx_edges(G, pos, width=1, edgelist=list(mst))

# labels; make them but dont actually draw them
labels = {ii: label for ii, label in enumerate(labels)}
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')

plt.axis('off')
# plt.savefig("weighted_graph.png")  # save as png

# legend
props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
# ax.text(-0.15, 0.95, textstr, transform=ax.transAxes,
#         fontsize=14, verticalalignment='top', bbox=props)
plt.axis('off')

# write to file in gexf format, gephi is much better for plotting networks
mst = nx.minimum_spanning_tree(G)
ws = nx.get_edge_attributes(mst, 'weight')
for key, value in ws.items():
    ws[key] = round(1 - value * value / 2, 2)
nx.set_edge_attributes(mst, 'weight', ws)
nx.set_node_attributes(mst, "label", labels)
nx.relabel_gexf_graph(mst)
nx.write_gexf(mst, "mst_courses.gexf")

plt.show()  # display