Python 将相同节点之间的边视为不同的边

Python 将相同节点之间的边视为不同的边,python,networkx,Python,Networkx,我使用networkx从节点对的边创建图形。问题是,有时这对线重复,但它们是一条分开的边 因此,在下面的示例中,每个链接都是一个单独的跃点,我们将流量作为STM-16从c:3发送到d:4,然后将流量整理到STM-4,再返回到c:3,然后发送到e:5。所以我想把这些画成一条直线 两个节点之间的每个链接都是不同的,并且有一个单独的链接标签 例如: edgeList=[] start_time = time.time() G = nx.Graph() G.add_edges_from([ ((

我使用networkx从节点对的边创建图形。问题是,有时这对线重复,但它们是一条分开的边

因此,在下面的示例中,每个链接都是一个单独的跃点,我们将流量作为STM-16从c:3发送到d:4,然后将流量整理到STM-4,再返回到c:3,然后发送到e:5。所以我想把这些画成一条直线

两个节点之间的每个链接都是不同的,并且有一个单独的链接标签

例如:

edgeList=[]

start_time = time.time() 

G = nx.Graph()

G.add_edges_from([
(('a:1'), ('b:2'), {'link':'one'}),
(('b:2'), ('c:3'), {'link':'two'}),
(('c:3'), ('d:4'), {'link':'three'}),
(('d:4'), ('c:3'), {'link':'four'}),
(('c:3'), ('e:5'), {'link':'five'})
])

nx.draw(G, with_labels=True)
plt.savefig("path.png")
plt.show()
这给了我:

我要找的是一条直线,我想从

a:1>>b:2>>c:3>>d:4>>c:3>>e:5

以直线而不是在C3处分叉

我不能使用有向图,因为我没有方向,我有一个无序的集合(node1,node2,linkname)


此外,我无法更改节点名称,它们稍后用于拉入一组节点属性

您违反了图形的一个基本属性:给定的标签唯一标识一个节点。你让networkx回到“c:3”,它完全按照你的要求做了

首先,理解图形的本质:所有这些边同时存在。绘制图形时,图片中没有线性排序。没有“返回”,只有一端带有箭头的边缘

你的基本图论矛盾在这里:

we send traffic from c:3 to d:4 as STM-16
and it comes back groomed down to STM-4 
back to c:3 where it is sent on to e:5
您为两个不同的节点指定了相同的标签。在图表中,这意味着它们是相同的状态,但您的描述清楚地表明您期望不同的操作。简言之,下定决心。如果它们需要不同的操作,那么它们是不同的状态,您必须在图形规范中这样描述它们。如果您有一个工厂碰巧将这两个步骤放在同一个物理位置,那么这就是工厂构建中的问题,而不是这个绘图工具所担心的问题。:-)

我看到两个基本的选择:

(1) 描述你的步骤。回到位置
c
实际上是第5步,而不是回到第3步

G.add_edges_from([
(('a:1'), ('b:2'), {'link':'one'}),
(('b:2'), ('c:3'), {'link':'two'}),
(('c:3'), ('d:4'), {'link':'three'}),
(('d:4'), ('c:5'), {'link':'four'}),
(('c:5'), ('e:6'), {'link':'five'})
])
(2) 给
networkx
一个标签,用您的术语描述事物,但使用不显示的装饰:

G.add_edges_from([
(('a:1'), ('b:2'), {'link':'one'}),
(('b:2'), ('c:3'), {'link':'two'}),
(('c:3'), ('d:4'), {'link':'three'}),
(('d:4'), (' c:3 '), {'link':'four'}),
((' c:3 '), ('e:5'), {'link':'five'})
])

我不确定这会特别愚弄
networkx
,但试试看。如果不起作用,请尝试使用下划线或句点。最坏的情况下,也许“c:3.1”和“c:3.2”可以满足您的需要。

好的,谢谢。所以我希望我可以用一种更以边缘为中心的方式来实现这一点,因为我的边缘标签是唯一的,但是如果这不可能,那么我想我需要想一种方法来构造具有唯一节点跃点的边缘,并将节点名映射为属性。