Построение графика networkx с node ярлыками по умолчанию node name

NetworkX является мощным, но я пытался построить график, который по умолчанию показывает метки node, и я был удивлен, насколько утомительная эта, казалось бы, простая задача может быть для кого-то нового для Networkx. Существует пример, который показывает, как добавлять метки к сюжету.

https://networkx.github.io/documentation/latest/examples/drawing/labels_and_colors.html

Проблема с этим примером заключается в том, что он использует слишком много шагов и методов, когда все, что я хочу сделать, это просто показать метки, которые совпадают с именем node при рисовании графика.

# Add nodes and edges
G.add_node("Node1")
G.add_node("Node2")
G.add_edge("Node1", "Node2")
nx.draw(G)    # Doesn't draw labels. How to make it show labels Node1, Node2 along?

Есть ли способ сделать nx.draw(G) показать метки по умолчанию (Node1, Node2 в этом случае), встроенные в график?

Ответы

Ответ 1

tl/dr: просто добавьте with_labels=True к вызову nx.draw.

Страница page, на которую вы смотрели, несколько сложна, потому что она показывает, как установить множество разных вещей в качестве меток, как придать разным узлам разные цвета и как тщательно контролировать положение узлов. Так что много чего происходит.

Однако, похоже, вы просто хотите, чтобы каждый узел использовал свое имя, и вы довольны цветом по умолчанию и положением по умолчанию. Так

import networkx as nx
import pylab as plt

G=nx.Graph()
# Add nodes and edges
G.add_edge("Node1", "Node2")
nx.draw(G, with_labels = True)
plt.savefig('labels.png')

enter image description here

Если вы хотите сделать что-то, чтобы метки узлов были разными, вы можете отправить dict в качестве аргумента. Так, например,

labeldict = {}
labeldict["Node1"] = "shopkeeper"
labeldict["Node2"] = "angry man with parrot"

nx.draw(G, labels=labeldict, with_labels = True)

enter image description here