如何设置NetworkX边缘标签偏移量?(以避免标签重叠)

16

我正在尝试为一个图形添加边缘标签。一切都正常,唯一的问题是当两个边缘相交时——由于它们恰好重叠,我只能看到其中一个标签。

example

如您所见,hphob-alpha标签被显示,但polarity-beta标签未显示(我猜想它位于先前提到的标签下面)。

我找不到任何有关如何重新定位标签的文档,您有什么建议来设置某种偏移量以移动标签吗?

用于生成该图的代码:

try:
    import matplotlib.pyplot as plt
except:
    raise

import networkx as nx

G=nx.Graph()

a="hphob"
b="polarity"
c="alpha"
d="beta"
G.add_edge(a,b,weight=0.5)
G.add_edge(b,c,weight=0.5)
G.add_edge(c,d,weight=0.5)
G.add_edge(a,d,weight=0.5)
G.add_edge(a,c,weight=0.5)
G.add_edge(b,d,weight=0.5)

pos=nx.spring_layout(G) # positions for all nodes

# nodes
nx.draw_networkx_nodes(G,pos,node_size=7000, node_color="white")

# edges
nx.draw_networkx_edges(G,pos,
        width=6,alpha=0.5,edge_color='black')


# labels
nx.draw_networkx_labels(G,pos,font_size=20,font_family='sans-serif')

nx.draw_networkx_edge_labels(G,pos, 
    {
        (a,b):"x", (b,c):"y", (c,d):"w", (a,d):"z", (a,c):"v", (b,d):"r"
    }
)

plt.axis('off')
plt.savefig("weighted_graph.png") # save as png
plt.show() # display
1个回答

13
我使用NetworkX的1.6版本,在那里我可以向draw_networkx_edge_labels()提交label_pos。默认情况下,它设置为0.5,但是使用您的示例并将其设置为0.3,我得到以下结果:Weighted graph with edge labels shifted
nx.draw_networkx_edge_labels(G,pos, 
    {
        (a,b):"x", (b,c):"y", (c,d):"w", (a,d):"z", (a,c):"v", (b,d):"r"
    },
    label_pos=0.3
)

这里有详细信息


我刚才看到它已经包含在版本1.6的文档中了。 - Maehler
另一个好处是边缘可以有多个标签,并且可以在这些不同的偏移位置上定位。 - Vikram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接