我想画这样的东西:
我能找到的最接近的是NetworkX Edge Colormap:
http://networkx.github.io/documentation/latest/examples/drawing/edge_colormap.html
这是源代码:
#!/usr/bin/env python
"""
Draw a graph with matplotlib, color edges.
You must have matplotlib>=87.7 for this to work.
"""
__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
try:
import matplotlib.pyplot as plt
except:
raise
import networkx as nx
G=nx.star_graph(20)
pos=nx.spring_layout(G)
colors=range(20)
nx.draw(G,pos,node_color='#A0CBE2',edge_color=colors,width=4,edge_cmap=plt.cm.Blues,with_labels=False)
plt.savefig("edge_colormap.png") # save as png
plt.show() # display
在玩完源代码之后,我无法弄清楚如何硬编码中心边缘圆的距离。现在是随机的。
另外,如何标记边缘圆圈及其与中心的距离?
我知道位置来自pos=nx.spring_layout(G)
。所以我查看了spring_layout属性,发现可以使用pos变量指定位置,该变量是一个字节,其中节点作为键,值作为列表。 (https://networkx.github.io/documentation/latest/reference/generated/networkx.drawing.layout.spring_layout.html)
但即使我做以下结果也是随机边缘:
ap = {'uniwide':[55,34,1],'eduram':[34],'uniwide_webauth':[20,55,39],'uniwide_guest':[55,34],'tele9751_lab':[100],'HomeSDN':[100],'TP-LINK':[39]}
pos=nx.spring_layout(G,pos=ap)
答案 0 :(得分:3)
您可以使用pos
字典显式设置节点位置。
例如
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edge('center',1)
G.add_edge('center',2)
G.add_edge('center',3)
G.add_edge('center',4)
pos = {'center':(0,0),
1:(1,0),
2:(0,1),
3:(-1,0),
4:(0,-1)
}
nx.draw(G, pos=pos, with_labels=True)
plt.show()
答案 1 :(得分:1)
我尽力帮助他。我不会试图让它们保持静止。您希望添加和删除内容,而算法的自动展示位置是您不想丢失的内容。根据文档,你应该调整k。看起来 n
为20
,因此将k乘以某个因子以增加距离。
n = 20
nx.spring_layout(G, k=(1.0/pow(n, .5))) # what it currently is
应该是这样的:
nx.spring_layout(G, k=(1.0/pow(n, .5))*1.5) # play around with this factor