python networkX为特定边添加颜色

时间:2014-07-21 19:59:25

标签: python networkx edge

我正在努力解决如何在这里为特定边添加颜色的问题。假设我希望从一到二的边缘有蓝色,而不必重写其他的egdes?另外,我想知道我们是否可以有一个箭头从一个节点指向另一个节点而不是一条直线的边缘?

最佳

皮特

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
class obj(object):
    def __init__(self,N,P):
        self.N = N
        self.P = P 
one   = obj(1,0.5)
two   = obj(2,0.4)
three = obj(3,0.3)
four  = obj(4,0.2)
G.add_node(one.N)
G.add_node(two.N)
G.add_node(three.N)
G.add_node(four.N)

G.add_edge(one.N,two.N)
G.add_edge(two.N,three.N)
G.add_edge(two.N,four.N)
G.add_edge(four.N,one.N)

nx.draw(G)
plt.show()

1 个答案:

答案 0 :(得分:1)

您可以使用edge_color参数向networkx.draw绘制不同颜色的边。这是一个示例,您将第一条边(1,2)设置为红色,并通过传递一个"边缘颜色元组使其他边缘变为蓝色"列出每条边的颜色。在此示例中,第一条边是红色,而其他边是蓝色。

nx.draw(G, pos=pos, edge_color=('r', 'b', 'b', 'b'))

example drawing

如果你想在边缘有箭头,你可以使用DiGraph(有向图)。所有你必须改变的是:

G = nx.DiGraph()

然后你的边缘会被引导。

example-drawing-directed

如果你想让箭头指向两个方向,你必须在每个方向上添加每个边缘并更新边缘颜色的元组(因为现在你有两倍的边缘):

# Add edges in each direction
G.add_edge(one.N,two.N)
G.add_edge(two.N,one.N)
G.add_edge(two.N,three.N)
G.add_edge(three.N,two.N)
G.add_edge(two.N,four.N)
G.add_edge(four.N,two.N)
G.add_edge(four.N,one.N)
G.add_edge(one.N, four.N)

# Draw the graph
pos = nx.spring_layout(G)
nx.draw(G, pos=pos, edge_color=('r', 'b', 'r', 'b', 'b', 'b', 'b', 'b'))

example-drawing-directed-both-ways