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)
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