TKngDisuke
@TKngDisuke (大輔 徳永)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[NetworkX]グラフのノード(エッジ無しだけ)が反映されないバグ

[NetworkX]グラフのノード(エッジ無しだけ)が反映されないバグ

python3.9,networkxも最新の環境です。

例)
anaconda環境でnetworkxのパッケージを用いてgraph edit distanceを作動させています。

その中でグラフのノード(エッジ無しだけ)が反映されないバグが発生しました。
解決方法を教えて下さい。

参考サイトはこちらhttps://data-analysis-stats.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92/networkx%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E9%A1%9E%E4%BC%BC%E5%BA%A6/

発生している問題・エラー

import numpy as np
import networkx as nx
import scipy as sp
import matplotlib.pyplot as plt

G1 = nx.Graph()
G1.add_nodes_from([(A, {"label":"A"}),
("B", {"label":"B"}),
("C", {"label":"C"}),
("D", {"label":"D"}),
("E", {"label":"E"}),
("L", {"label":"L"}),
("K", {"label":"K"})])
G1.add_edges_from([("A","C"), ("A", "D"),
("K", "E"), ("D", "A"),
("A", "B"), ("C", "D")])
print(G1.nodes())
print(G1.edges())
nx.draw(G1,
node_color="lightgreen",
edge_color="lightgreen",
node_size=500,
width=8,
alpha=0.5,
with_labels=True)

nx.nx_agraph.view_pygraphviz(G1, prog='fdp')

G2 = nx.Graph()
G2.add_nodes_from([("A", {"label":"A"}),
("B", {"label":"B"}),
("D", {"label":"D"}),
("E", {"label":"E"}),
("F", {"label":"F"}),
("Q", {"label":"Q"}),
("J", {"label":"J"}),
("X", {"label":"X"})])
G2.add_edges_from([("A","B"), ("Q", "D"),
("J","F"), ("A", "E"),
("D", "F"), ("X","A")])
print(G2.nodes())
print(G2.edges())
nx.draw(G2,
node_color="lightblue",
edge_color="lightblue",
node_size=500,
width=8,
alpha=0.5,
with_labels=True)
nx.nx_agraph.view_pygraphviz(G2, prog='fdp')

G12 = nx.compose(G1,G2)
print("G1 count:", len(G1))
print("G2 count:", len(G2))
print("G1・G2 compose:", len(G12))
print(G12.nodes())

スクリーンショット 2022-10-14 18.40.50.png
図1

スクリーンショット 2022-10-14 18.41.19.png
図2

問題は図2の頂点Lが反映されないことです。
ノードがないことも関係するかもしれませんが、図1と図2の集合の頂点は1つ少なく出力されてしまいます。
また頂点名を変えたい為、一部参照サイトから変更しました。
変更する前はうまくいったのですが、なぜこのような状況になるのかがわかりません。

自分で試したこと

IをLに変えたり、表記を変えた。

0

1Answer

弊環境にてそちらのコードをコピペで実行しました.

7行目
-   G1.add_nodes_from([(A, {"label":"A"}),
+   G1.add_nodes_from([("A", {"label":"A"}),

また,7行目はエラーが出るので,文字列"A"に直して実行しています.

最後のG12も他のものと同様の表示をさせたところ,ちゃんとノードLが表示されていることがわかります.

MergedImages.png

したがって,環境依存の問題と思われます.

弊環境は次のコマンドを打って確認しています.Anaconda環境でない通常のPythonに仮想環境を用意して上記コードを実行しています.

$ python3 -c "import platform, sys; print(platform.version()); print(sys.version)"
Darwin Kernel Version 21.6.0: Mon Aug 22 20:17:10 PDT 2022; root:xnu-8020.140.49~2/RELEASE_X86_64
3.9.15 (main, Oct 11 2022, 22:27:25) 
[Clang 14.0.0 (clang-1400.0.29.102)]

Python本体のバージョンは3.9で同一なので,Anaconda周辺や仮想環境,graphviz等の問題かと思われます.現状,そちらの環境との差異はAnacondaであるか否かしかわからないので,解決法を探る必要があると考えます.

とりあえず,

  • 仮想環境を立てて再度プログラムを実行してみる
  • graphvizのバージョンを見直す
  • matplotlibを使った表示をしてみる(現状はgraphviz)

のが良さそうです.

ちなみにGoogle Colaboratoryで実行してもLは表示されます.

0Like

Comments

  1. コードを完全にコピペで掲載されてる上で7行目のエラーに引っかからないなら,単純に実行ファイルの差異によるものです.実行させているほうにLは無いのでしょう
  2. @TKngDisuke

    Questioner

    無事、うまくいきました!
    おそらくAのエラーを見過ごしていたのがエッジに不具合が生じたのかと思われます。
    ありがとうございます!
  3. おめでとうございます,質問は解決済を示す「クローズ」になさってくださいね
  4. @TKngDisuke

    Questioner

    わかりました!ありがとうございました
  5. 本質問ページ内にクローズの文字とかなんかあると思うんですけど,なければお気になさらず大丈夫です

Your answer might help someone💌