Python 根据graphviz_布局中的权重设置边缘长度

Python 根据graphviz_布局中的权重设置边缘长度,python,networkx,graphviz,Python,Networkx,Graphviz,我正在尝试使用networkx绘制加权图。我正在使用graphviz\u布局生成顶点的位置。我希望绘图中的边长度与我使用的边权重成比例。以下是实现此目的的代码片段: import networkx as nx from networkx.drawing.nx_agraph import graphviz_layout G = nx.Graph() G.add_weighted_edges_from(edgelist) pos = graphviz_layout(G) nx.draw_netwo

我正在尝试使用
networkx
绘制加权图。我正在使用
graphviz\u布局
生成顶点的位置。我希望绘图中的边长度与我使用的边权重成比例。以下是实现此目的的代码片段:

import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout

G = nx.Graph()
G.add_weighted_edges_from(edgelist)
pos = graphviz_layout(G)
nx.draw_networkx(G, pos=pos)
这似乎不会影响绘图中的边长度。但是,我已经看到,它只描述了如何将所有边的单个默认权重传递给
graphviz_layout
(或者我还不了解解决方案)

如何更改代码片段以绘制长度与边权重成比例的图形

在上面的代码片段中,
edgelist
是以下格式的列表:

edgelist = [[4, 219, 1.414], [4, 7, 3.86]]

关键是设置边的
len
属性,如中所述(适用于Neato)。请注意,这是首选的边长度,因此您无法完全控制。例如,您可以将单个加权边
(u,v,w)
添加到图形
G
,如下所示:

G.add_edge(u, v, len=w)
下面是一个完整的示例,使用:

为了说明使用边长度时布局的差异,下面是我将一阶节点(“Ginori”和“Pazzi”)的两条边设置为更长的结果:

以下是使用任何边长度得到的结果而不是

# Load modules
import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt

# Construct the graph, choosing some edges to be longer
G = nx.generators.social.florentine_families_graph()
lengths = dict()
long_edges = { frozenset(['Salviati', 'Pazzi']),
               frozenset(['Ginori', 'Albizzi']) }
for edge in G.edges():
    if frozenset(edge) in long_edges:
        lengths[edge] = dict(len=2)
    else:
        lengths[edge] = dict(len=1)

nx.set_edge_attributes(G, lengths)

# Plot and show
pos = graphviz_layout(G, prog='neato')
nx.draw_networkx(G, pos=pos)

plt.tight_layout()
plt.show()