def filter_network(g, degree_threshold=None, largest_connected_component=True): print "V,E:", g.number_of_nodes(), g.number_of_edges() degrees = g.degree(with_labels=True) subgraph_nodes = [] for id, d in degrees.iteritems(): if degree_threshold is None or d <= degree_threshold: subgraph_nodes.append(id) g_filtered = g.subgraph(subgraph_nodes) if largest_connected_component: component_nodes = networkx.connected_components(g_filtered)[0] g_filtered = g_filtered.subgraph(component_nodes ) print "V,E filtered:", g_filtered.number_of_nodes(), g_filtered.number_of_edges() return g_filtered
def filter_network(g, degree_threshold=None, largest_connected_component=True): print "V,E:", g.number_of_nodes(), g.number_of_edges() degrees = g.degree(with_labels=True) subgraph_nodes = [] for id, d in degrees.iteritems(): if degree_threshold is None or d <= degree_threshold: subgraph_nodes.append(id) g_filtered = g.subgraph(subgraph_nodes) if largest_connected_component: component_nodes = networkx.connected_components(g_filtered)[0] g_filtered = g_filtered.subgraph(component_nodes) print "V,E filtered:", g_filtered.number_of_nodes( ), g_filtered.number_of_edges() return g_filtered
def get_connected_components(G, return_as_graph_list=True): """ Finds (strongly in the case of directed network) connected components of graph returnAsGraphList: returns list of graph objects corresponding to connected components (from larger to smaller) otherwise returns list of node list corresponding nodes in connected components """ result_list = [] if return_as_graph_list: result_list = networkx.connected_component_subgraphs(G) else: result_list = networkx.connected_components(G) return result_list
def analyze_network(g, out_file=None, seeds=None, calculate_radius=False): if out_file is None: from sys import stdout out_method = stdout.write else: file = open(out_file, "a") out_method = file.write # print networkx.info(g) # currently buggy but fixed in the next version of networkx out_method("(V,E): %d %d\n" % (g.number_of_nodes(), g.number_of_edges())) out_method("V/E: %f\n" % (int(g.number_of_nodes()) / float(g.number_of_edges()))) degrees = g.degree() degrees.sort() out_method("Average degree: %f\n" % float(sum(degrees) / float(len(degrees)))) out_method("Most connected 20 nodes: %s\n" % degrees[-20:]) connected_components = networkx.connected_components(g) out_method("Connected component sizes: %s\n" % map(len, connected_components)) # Radius calculation is very time consuming if calculate_radius: out_method("Radius (of the largest connected component): %d\n" % get_network_radius(g.subgraph(connected_components[0]))) #print get_network_degree_histogram(g) if seeds is not None: if len(seeds) <= 1: out_method("Average linker degree: %f\n" % (0)) out_method("Average seed connecting shortest paths length: %f\n" % (0)) else: node_to_ld = get_node_linker_degrees(g, seeds) vals = [node_to_ld[v] for v in seeds] out_method("Average linker degree: %f\n" % (float(sum(vals)) / len(vals))) #sp_lengths = networkx.all_pairs_shortest_path_length(g) sum_length = 0 count = 0 for i, u in enumerate(seeds): sp_lengths = networkx.single_source_dijkstra_path_length(g, u) for j, v in enumerate(seeds): if j < i: sum_length += sp_lengths[v] #[u][v] count += 1 out_method("Average seed connecting shortest paths length: %f\n" % (float(sum_length) / count)) if out_file is not None: file.close() return
def analyze_network(g, out_file = None, seeds = None, calculate_radius = False): if out_file is None: from sys import stdout out_method = stdout.write else: file = open(out_file, "a") out_method = file.write # print networkx.info(g) # currently buggy but fixed in the next version of networkx out_method("(V,E): %d %d\n" % (g.number_of_nodes(), g.number_of_edges())) out_method("V/E: %f\n" % (int(g.number_of_nodes()) / float(g.number_of_edges()))) degrees = g.degree() degrees.sort() out_method("Average degree: %f\n" % float(sum(degrees)/float(len(degrees)))) out_method("Most connected 20 nodes: %s\n" % degrees[-20:]) connected_components = networkx.connected_components(g) out_method("Connected component sizes: %s\n" % map(len, connected_components)) # Radius calculation is very time consuming if calculate_radius: out_method("Radius (of the largest connected component): %d\n" % get_network_radius(g.subgraph(connected_components[0]))) #print get_network_degree_histogram(g) if seeds is not None: if len(seeds) <= 1: out_method("Average linker degree: %f\n" % (0)) out_method("Average seed connecting shortest paths length: %f\n" % (0)) else: node_to_ld = get_node_linker_degrees(g, seeds) vals = [ node_to_ld[v] for v in seeds ] out_method("Average linker degree: %f\n" % (float(sum(vals))/len(vals))) #sp_lengths = networkx.all_pairs_shortest_path_length(g) sum_length = 0 count = 0 for i, u in enumerate(seeds): sp_lengths = networkx.single_source_dijkstra_path_length(g, u) for j, v in enumerate(seeds): if j<i: sum_length += sp_lengths[v] #[u][v] count += 1 out_method("Average seed connecting shortest paths length: %f\n" % (float(sum_length)/count)) if out_file is not None: file.close() return
def create_R_analyze_network_script(g, seeds=None, out_path="./", title="", scale_by_log=False): if scale_by_log: f = open(out_path + "analyze_network_log_scaled.r", "w") f.write( "postscript(\"%sanalyze_network_log_scaled.eps\", width = 6, height = 6, horizontal = FALSE, onefile = FALSE, paper = \"special\", title = \"%s\")\n" % (out_path, title)) else: f = open(out_path + "analyze_network.r", "w") f.write( "postscript(\"%sanalyze_network.eps\", width = 6, height = 6, horizontal = FALSE, onefile = FALSE, paper = \"special\", title = \"%s\")\n" % (out_path, title)) f.write("par(mfrow=c(3,2))\n") node_to_values = get_node_degree_related_values(g, seeds) f.write( "f<-function(l) { \nr<-c()\nfor(i in 1:length(l)) {\n if(l[i] <= 1) {\n r[i]<-l[i]\n }\n else { \n r[i]<-(1+log10(l[i]))\n } \n}\nreturn(r)\n}\n" ) # Degree distribution #degrees = g.degree(with_labels = True) #n_node = len(degrees) #d_max = max(degrees.values()) d_max = max(node_to_values.values(), key=lambda x: x[0])[0] non_seed_degree_counts = [0] * (d_max + 1) seed_degree_counts = [0] * (d_max + 1) #for v,d in degrees.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #if d_ != d: print v, d, d_ # networkx includes self edges in degree if v in seeds: seed_degree_counts[d] += 1 else: non_seed_degree_counts[d] += 1 f.write("n<-c(%s)\n" % ",".join(map(str, seed_degree_counts))) f.write("N<-c(%s)\n" % ",".join(map(str, non_seed_degree_counts))) f.write("s<-(n+N)\n") if scale_by_log: f.write("A<-matrix(c(f(n), f(N+n)-f(n)), nrow=2, byrow=TRUE)\n") f.write( "barplot(A, yaxt=\"n\", names.arg=c(0:(length(n)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) else: f.write("A<-matrix(c(n, N), nrow=2, byrow=TRUE)\n") ##f.write("barplot(A, yaxp=c(0,max(N+n),1), xaxp=c(1, length(n), 1), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n") f.write( "barplot(A, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(n)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n" ) #f.write("barplot(A, xaxt=\"n\", legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n") #f.write("axis(1, seq(0,length(n)-1,round(length(n)/5)), labels=seq(0,length(n)-1,round(length(n)/5)))\n") # Log-log plot of degree distribution #f.write("par(fig=c(0.6, 1, 0.1, 0.5), new = T)\n") # Make this plot inner f.write("p<-c()\n") f.write("d<-c()\n") f.write( "for(i in 2:length(s)) { if(s[i] != 0) { p[i]<-s[i]; d[i]<-i; } }\n") f.write("fit<-lm(log10(d) ~ log10(p))\n") f.write( "plot(0:(length(s)-1), s, log=\"xy\", yaxt=\"n\", xlab=\"Degree (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, las=2)\n") f.write( "#plot(d, p, yaxt=\"n\", xlab=\"log(degree)\", ylab=\"log(# of nodes)\")\n" ) f.write("#axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) f.write("abline(fit, col=2, lty=2)\n") f.write("legend(\"topright\", c(\"linear (ls) fit\"), col=c(2), lty=2)\n") #f.write("par(fig=c(0, 1, 0, 1))\n") # Linker degree distribution #node_to_ld = get_node_linker_degrees(g, seeds) #ld_max = max(node_to_ld.values()) ld_max = max(node_to_values.values(), key=lambda x: x[1])[1] non_seed_ldegree_counts = [0] * (ld_max + 1) seed_ldegree_counts = [0] * (ld_max + 1) #for v,ld in node_to_ld.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #d, ld_, d2, ld2 = node_to_values[v] #assert (ld_ == ld) #if ld_ != ld: print v, ld, ld_ if v in seeds: seed_ldegree_counts[ld] += 1 else: non_seed_ldegree_counts[ld] += 1 f.write("ln<-c(%s)\n" % ",".join(map(str, seed_ldegree_counts))) f.write("lN<-c(%s)\n" % ",".join(map(str, non_seed_ldegree_counts))) if scale_by_log: f.write("lA<-matrix(c(f(ln), f(lN+ln)-f(ln)), nrow=2, byrow=TRUE)\n") f.write( "barplot(lA, yaxt=\"n\", names.arg=c(0:(length(ln)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker Degree\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("#lA<-matrix(c(f(lN+ln), f(ln)), nrow=2, byrow=TRUE)\n") f.write( "#barplot(lA, beside=TRUE, yaxt=\"n\", names.arg=c(0:(length(ln)-1)), legend.text=rev(c(\"seed\",\"all\")), col=rev(heat.colors(2)), xlab=\"Linker Degree\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) else: f.write("lA<-matrix(c(ln, lN), nrow=2, byrow=TRUE)\n") f.write( "barplot(lA, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(ln)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker Degree\", ylab=\"Number of nodes\")\n" ) # Linker degree ratio non_seed_ld_ratio_counts = [0] * 11 seed_ld_ratio_counts = [0] * 11 #for v,ld in node_to_ld.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #ratio = float(ld) / degrees[v] if ld == 0: ratio = 0 else: ratio = float(ld) / d ratio = int(ratio * 10) if v in seeds: seed_ld_ratio_counts[ratio] += 1 else: non_seed_ld_ratio_counts[ratio] += 1 f.write("rn<-c(%s)\n" % ",".join(map(str, seed_ld_ratio_counts))) f.write("rN<-c(%s)\n" % ",".join(map(str, non_seed_ld_ratio_counts))) if scale_by_log: f.write("rA<-matrix(c(f(rn), f(rN+rn)-f(rn)), nrow=2, byrow=TRUE)\n") f.write( "barplot(rA, yaxt=\"n\", names.arg=c(0:(length(rn)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree / Degree\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) else: f.write("rA<-matrix(c(rn, rN), nrow=2, byrow=TRUE)\n") f.write( "barplot(rA, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(rn)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree / Degree\", ylab=\"Number of nodes\")\n" ) # Linker degree ratio at level 2 non_seed_ld2_ratio_counts = [0] * 11 seed_ld2_ratio_counts = [0] * 11 for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values if ld2 == 0: ratio = 0 else: ratio = float(ld2) / d2 ratio = int(ratio * 10) if v in seeds: seed_ld2_ratio_counts[ratio] += 1 else: non_seed_ld2_ratio_counts[ratio] += 1 f.write("rn2<-c(%s)\n" % ",".join(map(str, seed_ld2_ratio_counts))) f.write("rN2<-c(%s)\n" % ",".join(map(str, non_seed_ld2_ratio_counts))) if scale_by_log: f.write( "rA2<-matrix(c(f(rn2), f(rN2+rn2)-f(rn2)), nrow=2, byrow=TRUE)\n") f.write( "barplot(rA2, yaxt=\"n\", names.arg=c(0:(length(rn2)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree level2 / Degree level2\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) else: f.write("rA2<-matrix(c(rn2, rN2), nrow=2, byrow=TRUE)\n") f.write( "barplot(rA2, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(rn2)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree level2 / Degree level2\", ylab=\"Number of nodes\")\n" ) connected_components = networkx.connected_components(g) connected_component_sizes = map(len, connected_components) max_size = max(connected_component_sizes) connected_component_seed_counts = [0] * (max_size + 1) connected_component_non_seed_counts = [0] * (max_size + 1) for connected_component in connected_components: for i in connected_component: if i in seeds: connected_component_seed_counts[len(connected_component)] += 1 else: connected_component_non_seed_counts[len( connected_component)] += 1 f.write("c<-c(%s)\n" % ",".join(map(str, connected_component_seed_counts))) f.write("C<-c(%s)\n" % ",".join(map(str, connected_component_non_seed_counts))) if scale_by_log: f.write("cA<-matrix(c(f(c), f(C+c)-f(c)), nrow=2, byrow=TRUE)\n") #f.write("barplot(cA, yaxt=\"n\", log=\"x\", xaxp=c(0,length(c),1), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n") f.write( "barplot(cA, yaxt=\"n\", xaxt=\"n\", legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n" ) f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [10**i for i in xrange(5)]))) f.write( "axis(1, seq(1,length(c),round(length(c)/5)), labels=seq(1,length(c),round(length(c)/5)))\n" ) else: f.write("cA<-matrix(c(c, C), nrow=2, byrow=TRUE)\n") f.write( "barplot(cA, ylim=c(0,round(max(s)/4)), names.arg=c(1:length(c)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size\", ylab=\"Number of nodes\")\n" ) f.write("mtext(\'%s\', outer=TRUE, line=-1)\n" % title) f.write("dev.off()\n") f.close() return
def create_R_analyze_network_script(g, seeds = None, out_path = "./", title = "", scale_by_log=False): if scale_by_log: f = open(out_path + "analyze_network_log_scaled.r", "w") f.write("postscript(\"%sanalyze_network_log_scaled.eps\", width = 6, height = 6, horizontal = FALSE, onefile = FALSE, paper = \"special\", title = \"%s\")\n" % (out_path, title)) else: f = open(out_path + "analyze_network.r", "w") f.write("postscript(\"%sanalyze_network.eps\", width = 6, height = 6, horizontal = FALSE, onefile = FALSE, paper = \"special\", title = \"%s\")\n" % (out_path, title)) f.write("par(mfrow=c(3,2))\n") node_to_values = get_node_degree_related_values(g, seeds) f.write("f<-function(l) { \nr<-c()\nfor(i in 1:length(l)) {\n if(l[i] <= 1) {\n r[i]<-l[i]\n }\n else { \n r[i]<-(1+log10(l[i]))\n } \n}\nreturn(r)\n}\n") # Degree distribution #degrees = g.degree(with_labels = True) #n_node = len(degrees) #d_max = max(degrees.values()) d_max = max(node_to_values.values(), key=lambda x: x[0])[0] non_seed_degree_counts = [ 0 ] * (d_max + 1) seed_degree_counts = [ 0 ] * (d_max + 1) #for v,d in degrees.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #if d_ != d: print v, d, d_ # networkx includes self edges in degree if v in seeds: seed_degree_counts[d] += 1 else: non_seed_degree_counts[d] += 1 f.write("n<-c(%s)\n" % ",".join(map(str, seed_degree_counts))) f.write("N<-c(%s)\n" % ",".join(map(str, non_seed_degree_counts))) f.write("s<-(n+N)\n") if scale_by_log: f.write("A<-matrix(c(f(n), f(N+n)-f(n)), nrow=2, byrow=TRUE)\n") f.write("barplot(A, yaxt=\"n\", names.arg=c(0:(length(n)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) else: f.write("A<-matrix(c(n, N), nrow=2, byrow=TRUE)\n") ##f.write("barplot(A, yaxp=c(0,max(N+n),1), xaxp=c(1, length(n), 1), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n") f.write("barplot(A, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(n)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n") #f.write("barplot(A, xaxt=\"n\", legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Degree\", ylab=\"Number of nodes\")\n") #f.write("axis(1, seq(0,length(n)-1,round(length(n)/5)), labels=seq(0,length(n)-1,round(length(n)/5)))\n") # Log-log plot of degree distribution #f.write("par(fig=c(0.6, 1, 0.1, 0.5), new = T)\n") # Make this plot inner f.write("p<-c()\n") f.write("d<-c()\n") f.write("for(i in 2:length(s)) { if(s[i] != 0) { p[i]<-s[i]; d[i]<-i; } }\n") f.write("fit<-lm(log10(d) ~ log10(p))\n") f.write("plot(0:(length(s)-1), s, log=\"xy\", yaxt=\"n\", xlab=\"Degree (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, las=2)\n") f.write("#plot(d, p, yaxt=\"n\", xlab=\"log(degree)\", ylab=\"log(# of nodes)\")\n") f.write("#axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) f.write("abline(fit, col=2, lty=2)\n") f.write("legend(\"topright\", c(\"linear (ls) fit\"), col=c(2), lty=2)\n") #f.write("par(fig=c(0, 1, 0, 1))\n") # Linker degree distribution #node_to_ld = get_node_linker_degrees(g, seeds) #ld_max = max(node_to_ld.values()) ld_max = max(node_to_values.values(), key=lambda x: x[1])[1] non_seed_ldegree_counts = [ 0 ] * (ld_max + 1) seed_ldegree_counts = [ 0 ] * (ld_max + 1) #for v,ld in node_to_ld.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #d, ld_, d2, ld2 = node_to_values[v] #assert (ld_ == ld) #if ld_ != ld: print v, ld, ld_ if v in seeds: seed_ldegree_counts[ld] += 1 else: non_seed_ldegree_counts[ld] += 1 f.write("ln<-c(%s)\n" % ",".join(map(str, seed_ldegree_counts))) f.write("lN<-c(%s)\n" % ",".join(map(str, non_seed_ldegree_counts))) if scale_by_log: f.write("lA<-matrix(c(f(ln), f(lN+ln)-f(ln)), nrow=2, byrow=TRUE)\n") f.write("barplot(lA, yaxt=\"n\", names.arg=c(0:(length(ln)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker Degree\", ylab=\"Number of nodes (Log scale)\")\n") f.write("#lA<-matrix(c(f(lN+ln), f(ln)), nrow=2, byrow=TRUE)\n") f.write("#barplot(lA, beside=TRUE, yaxt=\"n\", names.arg=c(0:(length(ln)-1)), legend.text=rev(c(\"seed\",\"all\")), col=rev(heat.colors(2)), xlab=\"Linker Degree\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) else: f.write("lA<-matrix(c(ln, lN), nrow=2, byrow=TRUE)\n") f.write("barplot(lA, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(ln)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker Degree\", ylab=\"Number of nodes\")\n") # Linker degree ratio non_seed_ld_ratio_counts = [ 0 ] * 11 seed_ld_ratio_counts = [ 0 ] * 11 #for v,ld in node_to_ld.iteritems(): for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values #ratio = float(ld) / degrees[v] if ld == 0: ratio = 0 else: ratio = float(ld) / d ratio = int(ratio * 10) if v in seeds: seed_ld_ratio_counts[ratio] += 1 else: non_seed_ld_ratio_counts[ratio] += 1 f.write("rn<-c(%s)\n" % ",".join(map(str, seed_ld_ratio_counts))) f.write("rN<-c(%s)\n" % ",".join(map(str, non_seed_ld_ratio_counts))) if scale_by_log: f.write("rA<-matrix(c(f(rn), f(rN+rn)-f(rn)), nrow=2, byrow=TRUE)\n") f.write("barplot(rA, yaxt=\"n\", names.arg=c(0:(length(rn)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree / Degree\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) else: f.write("rA<-matrix(c(rn, rN), nrow=2, byrow=TRUE)\n") f.write("barplot(rA, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(rn)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree / Degree\", ylab=\"Number of nodes\")\n") # Linker degree ratio at level 2 non_seed_ld2_ratio_counts = [ 0 ] * 11 seed_ld2_ratio_counts = [ 0 ] * 11 for v, values in node_to_values.iteritems(): d, ld, d2, ld2 = values if ld2 == 0: ratio = 0 else: ratio = float(ld2) / d2 ratio = int(ratio * 10) if v in seeds: seed_ld2_ratio_counts[ratio] += 1 else: non_seed_ld2_ratio_counts[ratio] += 1 f.write("rn2<-c(%s)\n" % ",".join(map(str, seed_ld2_ratio_counts))) f.write("rN2<-c(%s)\n" % ",".join(map(str, non_seed_ld2_ratio_counts))) if scale_by_log: f.write("rA2<-matrix(c(f(rn2), f(rN2+rn2)-f(rn2)), nrow=2, byrow=TRUE)\n") f.write("barplot(rA2, yaxt=\"n\", names.arg=c(0:(length(rn2)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree level2 / Degree level2\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) else: f.write("rA2<-matrix(c(rn2, rN2), nrow=2, byrow=TRUE)\n") f.write("barplot(rA2, ylim=c(0,round(max(s)/4)), names.arg=c(0:(length(rn2)-1)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Linker degree level2 / Degree level2\", ylab=\"Number of nodes\")\n") connected_components = networkx.connected_components(g) connected_component_sizes = map(len, connected_components) max_size = max(connected_component_sizes) connected_component_seed_counts = [ 0 ] * (max_size + 1) connected_component_non_seed_counts = [ 0 ] * (max_size + 1) for connected_component in connected_components: for i in connected_component: if i in seeds: connected_component_seed_counts[len(connected_component)] += 1 else: connected_component_non_seed_counts[len(connected_component)] += 1 f.write("c<-c(%s)\n" % ",".join(map(str, connected_component_seed_counts))) f.write("C<-c(%s)\n" % ",".join(map(str, connected_component_non_seed_counts))) if scale_by_log: f.write("cA<-matrix(c(f(c), f(C+c)-f(c)), nrow=2, byrow=TRUE)\n") #f.write("barplot(cA, yaxt=\"n\", log=\"x\", xaxp=c(0,length(c),1), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n") f.write("barplot(cA, yaxt=\"n\", xaxt=\"n\", legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size (Log scale)\", ylab=\"Number of nodes (Log scale)\")\n") f.write("axis(2, 0:5, labels=c(0,%s), las=2)\n" % ",".join(map(str, [ 10**i for i in xrange(5) ]))) f.write("axis(1, seq(1,length(c),round(length(c)/5)), labels=seq(1,length(c),round(length(c)/5)))\n") else: f.write("cA<-matrix(c(c, C), nrow=2, byrow=TRUE)\n") f.write("barplot(cA, ylim=c(0,round(max(s)/4)), names.arg=c(1:length(c)), legend.text=c(\"seed\",\"all\"), col=heat.colors(2), xlab=\"Connected component size\", ylab=\"Number of nodes\")\n") f.write("mtext(\'%s\', outer=TRUE, line=-1)\n" % title) f.write("dev.off()\n") f.close() return