LoginSignup
1
0

More than 3 years have passed since last update.

networkxの頂点に対応する量をAxes3Dを使って縦に可視化する

Posted at

タイトルの通りですが,networkxを使っていると可視化に悩むことがそこそこあります.例えば

  • ノードに実数値が対応している場合 → ノードの大きさ(s)を変化させる
  • ノードに離散値が対応している場合 → ノードの色を変化させる

という感じで簡単に区別することができますが,なかなか2次元だけではうまく数値を読みづらいことも多いです.ここではmatplotlibのAxes3Dを利用して,できるだけ手抜きをして可視化をやってみました.例として,関東の県庁所在地の緯度経度を取ってきて,各地点に都道府県の人口が乗っていると考えます.次のように可視化しました.

2次元 3次元
plot2d.png anim.gif

データ

適当に取ってきました (参考: https://www.benricho.org/chimei/latlng_data.html ).接続関係は適当に作りました.間違ってたらすいません.

8,茨城県,36.34139,140.44667,2868041
9,栃木県,36.56583,139.88361,1942312
10,群馬県,36.39111,139.06083,1937626
11,埼玉県,35.85694,139.64889,7337330
12,千葉県,35.60472,140.12333,6279026
13,東京都,35.68944,139.69167,13942856
14,神奈川県,35.44778,139.6425,9200166
8,9
8,11
8,12
9,8
9,10
9,12
10,9
10,11
11,8
11,9
11,10
11,12
11,13
13,12
13,14
14,13

実装

Axes3Dを使うのですが,networkxの描画関数nx.drawなどはAxes3Dを渡しても怒られてしまいます.そのためz軸方向のデータを入れて強引に描画することにしています.具体的には

  • グラフを描いている地点は$z=0$に設定する
  • ノードに対応している数値を$z$軸で描く

としています.こうして得られた結果が上の図です.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0