質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1553閲覧

Netrorkxにおいて、ノードの大きさに比例してラベルのフォントの大きさを調整したい

netwrokxxxx

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/22 06:14

ラベルの大きさを調整したくて困っています。
出来ればノードの大きさを参照できるようにできれば幸いです。
よろしくお願いします。

python

1import matplotlib.pyplot as plt 2import networkx as nx 3 4G = nx.Graph() 5 6G.add_nodes_from(["A","B","C","D","E","F"]) 7G.add_edges_from([("A","B"),("B","C"),("B","F"),("C","D"),("C","E"),("C","F"),("B","F")]) 8 9 10print("number of nodes:",G.number_of_nodes()) 11print("nodes:",G.nodes()) 12 13print("number of edges:",G.number_of_edges()) 14print("edges:",G.edges()) 15 16print("degrees:",G.degree()) 17 18#ノードの大きさを決定 19#ネットワーク全体の次数の平均値を計算 20average_deg = sum(d for n,d in G.degree()) / G.number_of_nodes() 21#ノードの次数に比例するようにサイズを設定 22sizes = [300 * deg / average_deg for node,deg in G.degree()] 23 24colors = ["lightblue","green","red","cyan","magenta","yellow"] 25 26nodes_sorted_by_degree = sorted(G.degree(),key = lambda x: x[1],reverse = True) 27print(nodes_sorted_by_degree) 28 29colors_dict = dict(zip(G.nodes(),colors)) 30colors_sorted = [colors_dict[node] for node, _ in nodes_sorted_by_degree] 31print(colors_sorted) 32 33plt.figure(figsize = (10,5)) 34plt.subplot(121) 35nx.draw(G, 36 with_labels = True, 37 node_color = colors, 38 edge_color = "black", 39 node_size = sizes, 40 width = 5) 41 42x,height = list(zip(*nodes_sorted_by_degree)) 43plt.subplot(122) 44plt.xlabel("Number of degrees") 45plt.ylabel("Name of node") 46plt.barh(x, height, color = colors_sorted) 47plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Is it possible to change font sizes according to node sizes?が参考になります。
nx.drawではノード毎にフォントサイズ指定できないのでmatplotlib側でラベル描画すればよいです。

出来ればノードの大きさを参照できるようにできれば幸いです。

以下サンプルでは次数から直接フォントサイズを求めていますが、ノードの辞書をsizesの各値で作成すればできると思います。

Python

1from matplotlib.pyplot import text # textでラベル描画する 2# 略 3 4# はじめにレイアウト指定してノード位置を取得しておく 5pos = nx.spring_layout(G) 6degs = dict(G.degree) 7 8nx.draw(G, 9 pos = pos, # 位置を指定 10 with_labels = False, # ラベルは後で描画するので 11 node_color = colors, 12 edge_color = "black", 13 node_size = sizes, 14 width = 5) 15 16# ノード位置にラベルを描画 17for node, (x, y) in pos.items(): 18 text(x, y, node, fontsize=degs[node]*5, ha='center', va='center') 19 20# 略

イメージ説明

投稿2022/06/22 06:34

編集2022/06/22 06:42
can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

netwrokxxxx

2022/06/22 06:53

とても参考になりました。おかげで問題を解決することができました。 参考になるサイトを教えていただき誠に感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問