web-dev-qa-db-ja.com

デフォルトでノード名になっているノードラベルを持つnetworkxグラフのプロット

NetworkXは強力ですが、デフォルトでノードラベルを示すグラフをプロットしようとしていたので、この一見単純なタスクがNetworkxの初心者にとってどれほど面倒なものであるかに驚きました。プロットにラベルを追加する方法を示す例があります。

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

この例の問題は、グラフの描画中にノード名と同じラベルを表示するだけの場合に、使用するステップとメソッドが多すぎることです。

_# 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)をグラフに表示する方法はありますか?

34
Pranjal Mittal

tl/dr:with_labels=Truenx.draw呼び出しに追加するだけです。

ページ は、ラベルとして多くの異なるものを設定する方法、異なるノードに異なる色を与える方法、およびノー​​ドの位置を慎重に制御する方法を示すため、やや複雑です。そのため、多くのことが行われています。

ただし、各ノードに独自の名前を使用したいだけで、デフォルトの色とデフォルトの位置に満足しているように見えます。そう

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

ノードラベルが異なるようにしたい場合は、引数として辞書を送信できます。たとえば、

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

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

enter image description here

64
Joel