在python中绘制自定义图表

时间:2014-06-20 01:30:38

标签: python matplotlib networkx

我想画这样的东西:

我能找到的最接近的是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)  

2 个答案:

答案 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()

enter image description here

答案 1 :(得分:1)

我尽力帮助他。我不会试图让它们保持静止。您希望添加和删除内容,而算法的自动展示位置是您不想丢失的内容。根据文档,你应该调整k。看起来 n20 ,因此将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