Как установить привязки к краям NetworkX? (чтобы избежать перекрытия ярлыка)
Я пытаюсь добавить метки граней для графа. Все работает хорошо, только проблема заключается в том, когда пересекаются два ребра - я вижу только одну из ярлыков, поскольку они пересекаются.
![example]()
Как вы можете видеть, отображается метка hphob-alpha, но метка полярности-бета не отображается (моя догадка заключается в том, что она соответствует указанному ранее).
Я не мог найти документацию о том, как переставить метки, какие советы, как установить смещение для перемещения меток?
Код, используемый для генерации графика:
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
Я использую версию 1.6 NetworkX, и там я могу отправить label_pos
в draw_networkx_edge_labels()
. По умолчанию это значение равно 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
)
Вот подробности