将节点添加到固定主干使用graphviz绘制networkx图时,一些较大的节点最终会挤在一起
我使用networkx创建了一个图形。我使用graphviz绘制图形,特别是使用以下代码行:将节点添加到固定主干使用graphviz绘制networkx图时,一些较大的节点最终会挤在一起,graph,graphviz,networkx,Graph,Graphviz,Networkx,我使用networkx创建了一个图形。我使用graphviz绘制图形,特别是使用以下代码行: pos = nx.graphviz_layout(G2, prog='neato', args='-Goverlap=prism') plt.figure(figsize=(10, 14)) nx.draw(G2, pos, node_size=sizes, alpha=1, nodelist=nodes, node_color=colors, with_labels=True, labels=la
pos = nx.graphviz_layout(G2, prog='neato', args='-Goverlap=prism')
plt.figure(figsize=(10, 14))
nx.draw(G2, pos, node_size=sizes, alpha=1, nodelist=nodes, node_color=colors, with_labels=True, labels=labelDict, font_size=8)
该图由几个较大节点的“主干”组成,其中连接着几百个较小的节点
我使用了args='-Goverlap=prism'
(在上面的第一行代码中)来分隔图形,但这产生了一个问题。更重要的是,较大的节点要隔开,但是,由于有多少小节点,一些较大的节点最终会挤在一起
我的解决方案是生成一个只有较大节点的图,以确保它们具有适当的间距,然后将较小的节点添加到此图中,而不更改原始节点的布局。我做了一些研究,在graphviz中添加新节点而不更改旧节点似乎有点棘手。可以“锁定”节点,但我不确定如何在networkx中执行此操作
这是图形当前的外观:
你的想法似乎是合理的。下面的代码生成一个图形,将初始位置分配给节点1和2,然后使用
nx.spring\u layout
将位置分配给所有节点。我允许节点2移动,但节点1保持固定
import networkx as nx
G=nx.path_graph(6)
originalpos = {1:(0,0), 2:(1,0)}
newpos = nx.spring_layout(G, pos=originalpos, fixed=[1])
newpos
> {0: array([-0.39442754, -0.35733777]),
1: array([ 0., 0.]),
2: array([ 0.44050048, 0.3734393 ]),
3: array([ 0.8658906 , 0.80306291]),
4: array([ 1.21367619, 1.27878715]),
5: array([ 1.45676553, 1.72154196])}
对于您的情况,您将获得主干的位置,然后将这些节点用作固定列表 你的想法似乎是合理的。下面的代码生成一个图形,将初始位置分配给节点1和2,然后使用
nx.spring\u layout
将位置分配给所有节点。我允许节点2移动,但节点1保持固定
import networkx as nx
G=nx.path_graph(6)
originalpos = {1:(0,0), 2:(1,0)}
newpos = nx.spring_layout(G, pos=originalpos, fixed=[1])
newpos
> {0: array([-0.39442754, -0.35733777]),
1: array([ 0., 0.]),
2: array([ 0.44050048, 0.3734393 ]),
3: array([ 0.8658906 , 0.80306291]),
4: array([ 1.21367619, 1.27878715]),
5: array([ 1.45676553, 1.72154196])}
对于您的情况,您将获得主干的位置,然后将这些节点用作固定列表