
[英]When I use networkx.draw to draw the network, python2 and python3 use the same program, but python2 cannot draw correctly
[英]Draw network and grouped vertices of the same community or partition
我需要查看(绘制或绘制)网络中的社区结构
我有这个:
import igraph
from random import randint
def _plot(g, membership=None):
layout = g.layout("kk")
visual_style = {}
visual_style["edge_color"] = "gray"
visual_style["vertex_size"] = 30
visual_style["layout"] = layout
visual_style["bbox"] = (1024, 768)
visual_style["margin"] = 40
for vertex in g.vs():
vertex["label"] = vertex.index
if membership is not None:
colors = []
for i in range(0, max(membership)+1):
colors.append('%06X' % randint(0, 0xFFFFFF))
for vertex in g.vs():
vertex["color"] = str('#') + colors[membership[vertex.index]]
visual_style["vertex_color"] = g.vs["color"]
igraph.plot(g, **visual_style)
if __name__ == "__main__":
karate = igraph.Nexus.get("karate")
cl = karate.community_fastgreedy()
membership = cl.as_clustering().membership
_plot(karate, membership)
但顶点是传播的。 在另一个网络中,这个结果非常糟糕。
我希望顶点按类似区域中的颜色分组。
例如:
根据@ gabor-csardi的回答,我制作了这段代码:
import igraph
from random import randint
def _plot(g, membership=None):
if membership is not None:
gcopy = g.copy()
edges = []
edges_colors = []
for edge in g.es():
if membership[edge.tuple[0]] != membership[edge.tuple[1]]:
edges.append(edge)
edges_colors.append("gray")
else:
edges_colors.append("black")
gcopy.delete_edges(edges)
layout = gcopy.layout("kk")
g.es["color"] = edges_colors
else:
layout = g.layout("kk")
g.es["color"] = "gray"
visual_style = {}
visual_style["vertex_label_dist"] = 0
visual_style["vertex_shape"] = "circle"
visual_style["edge_color"] = g.es["color"]
# visual_style["bbox"] = (4000, 2500)
visual_style["vertex_size"] = 30
visual_style["layout"] = layout
visual_style["bbox"] = (1024, 768)
visual_style["margin"] = 40
visual_style["edge_label"] = g.es["weight"]
for vertex in g.vs():
vertex["label"] = vertex.index
if membership is not None:
colors = []
for i in range(0, max(membership)+1):
colors.append('%06X' % randint(0, 0xFFFFFF))
for vertex in g.vs():
vertex["color"] = str('#') + colors[membership[vertex.index]]
visual_style["vertex_color"] = g.vs["color"]
igraph.plot(g, **visual_style)
if __name__ == "__main__":
g = igraph.Nexus.get("karate")
cl = g.community_fastgreedy()
membership = cl.as_clustering().membership
_plot(g, membership)
结果:
删除多个社区的边,计算没有这些边的布局,然后将其用于原始图。
要将社区的顶点组合在一起并突出显示它们,您应该使用'mark_groups = True'。 请参见http://igraph.org/python/doc/igraph.clustering-pysrc.html#VertexClustering。 情节
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.