[解決済み] NetworkXから階層的な出力を保証する方法はありますか?
2023-01-20 03:43:41
質問
のフロー図を作成しようとしています。 ツリー 構造のフロー図を作成しようとしています。networkxで代表的なグラフを作ることはできたのですが、構造を表示する方法が欲しいのです。 ツリー 構造を表示する方法が必要です。matplotlib.pylabを使ってグラフをプロットしています。
というような構造でデータを表示する必要があります。 ここに . 私はサブグラフを持っていませんが。
そのような構造を保証するにはどうしたらよいのでしょうか?
不信心者のための例
pylabとgraphvizでグラフを表示することができましたが、どちらも私が探しているツリー構造を提供しません。networkx が提供するすべてのレイアウトを試しましたが、どれも 階層構造 . 私はただ、何が オプション/モード を与えるかです。 または を付与する必要があります。何か提案があれば、とても助かります。
@jterrace です。
上のプロットを作成するために使用したものの大まかな概要は以下の通りです。いくつかのラベルを追加しましたが、それ以外は同じです。
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_node("ROOT")
for i in xrange(5):
G.add_node("Child_%i" % i)
G.add_node("Grandchild_%i" % i)
G.add_node("Greatgrandchild_%i" % i)
G.add_edge("ROOT", "Child_%i" % i)
G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)
plt.title("draw_networkx")
nx.draw_networkx(G)
plt.show()
どのように解決するのですか?
有向グラフを使用する場合、Graphvizのドットレイアウトは、ツリーであなたが望むようなことをします。 その方法を示す、上記の解決策に似たいくつかのコードを紹介します。
import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node("ROOT")
for i in range(5):
G.add_node("Child_%i" % i)
G.add_node("Grandchild_%i" % i)
G.add_node("Greatgrandchild_%i" % i)
G.add_edge("ROOT", "Child_%i" % i)
G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)
# write dot file to use with graphviz
# run "dot -Tpng test.dot >test.png"
nx.nx_agraph.write_dot(G,'test.dot')
# same layout using matplotlib with no labels
plt.title('draw_networkx')
pos=graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=False, arrows=False)
plt.savefig('nx_test.png')
<イグ
アップデートのお知らせ
networkx-2.0用に更新されたバージョンです(次期networkx-2.1用の矢印も描かれています)。
import networkx as nx
from networkx.drawing.nx_agraph import write_dot, graphviz_layout
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node("ROOT")
for i in range(5):
G.add_node("Child_%i" % i)
G.add_node("Grandchild_%i" % i)
G.add_node("Greatgrandchild_%i" % i)
G.add_edge("ROOT", "Child_%i" % i)
G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)
# write dot file to use with graphviz
# run "dot -Tpng test.dot >test.png"
write_dot(G,'test.dot')
# same layout using matplotlib with no labels
plt.title('draw_networkx')
pos =graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=False, arrows=True)
plt.savefig('nx_test.png')
関連
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] リストの要素を値で削除する簡単な方法はありますか?
-
[解決済み] スレッドを強制終了させる方法はありますか?
-
[解決済み] Pythonで現在のユーザー名を取得するポータブルな方法はありますか?
-
[解決済み】文字列から句読点を除去する最適な方法
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Python 言語を決定するには?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例