私(回答者)に対する失礼なコメントに、私が気分を害し、私が「私は能無し故に適切な回答を準備することができないわけではない」旨を表するために回答をもう一つ追加します。「人により良い回答を求めたからには自分も改めてより良い回答を準備するのがスジ」という考えもありましたが、よくよく考えるとそれは2番目以降の理由でした。
コードの修正点1つ目
コードではplt
を使おうとしているので、事前にmatplotlib.pyplot
を以下のようにインポートする必要があります。
python
1import matplotlib.pyplot as plt
コードの修正点2つ目
プログラミングで何か画面に表示を出したいときには通常、描画(draw)と表示(show)を行います。
matplotlib
はグラフを描画・表示するのに便利なライブラリです。また、networkx
はグラフデータの扱いに特化したライブラリでmatplotlib
への描画も行えます。
上記を踏まえると、グラフデータを画面に出したいときにはnetworkx
で描画(draw)してmatplotlib
で表示(show)するという2ステップが(通常は)必要です。
よってコードの基本形は以下のようになります。
python
1# 前提1:Gはグラフデータ
2# 前提2:nxはnetworkx
3# 前提3:pltはmatplotlib.pyplot
4
5nx.draw(G) # ステップ1:描画
6plt.show() # ステップ2:表示
なので最後はplt.draw()
ではなくplt.show()
です。これでグラフが表示されるようになるはずです。
コードの実行方法の修正
python
コマンドの-W
オプションの使い方を間違えています。以下のようにスクリプトの後ろにオプションを置くとスクリプトへオプションが渡されてしまいます。
python
コマンドのヘルプを--help
で見てみると、
C:\Users\YouheiSakurai>python --help
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
(中略)
-W arg : warning control; arg is action:message:category:module:lineno
also PYTHONWARNINGS=arg
と表示され、オプションはpython
コマンドのすぐ後ろに置く、また-W
オプション(小文字ではなく大文字のW)はなにがしかのarg
を指定する必要があることがわかります。
このarg
に指定できる値の一覧は、https://docs.python.jp/3/using/cmdline.html#cmdoption-Wにあります。私がこのページにたどり着くために使った検索キーワードは「python w option」です。
よって、発せられるすべての警告を無視(非表示に)するには、
python -W ignore test4.py
とします。
修正後のtest4.pyとその実行方法
import networkx as nx
import matplotlib.pyplot as plt
G=nx.MultiDiGraph()
G.add_edges_from([('A','B'),('A','C'),('A','A'),('B','B'),('C','C')])
T = nx.DiGraph()
for t in range(4):
T.add_edge(t,t+1)
TimeSpace = nx.tensor_product(G,T)
nx.draw(TimeSpace)
plt.show()
python -W ignore test4.py
Pythonでコードをいろいろと試すにあたって知っておいたほうが良いこと
Pythonにおけるwarning
の規定の動作は、実行中の処理を中断せずに警告メッセージを表示するだけなので、処理が止まってしまうexception
(エラー・例外)とこのwarning
(注意・警告)は別物です。
自分のコードがうまく動かないときに出てきたメッセージが、exception
(エラー・例外)とwarning
(注意・警告)のどちらかなのかを正しく判別するようにすれば、そのメッセージが原因でコードが動いていないのか、それとも何か別の原因があるのかが判別できるようになります。
もう少し高次の段階まで進めばwarning
(注意・警告)を解決しないと、自分の意図する結果が得られないこともありえますが、今の段階ではまれだと思います。