NetworkX
前回、Pythonでネットワークを表示するライブラリNetworkXで、ポジションを使って、ネットワークの形状を変えてみました。
今回はNetworkXのフォントを変える方法、特に日本語を表示する方法を試していきましょう。
まずは基本のプログラムから。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, node_color='lightblue', with_labels = True)
実行結果
今回はNode名を日本語にするのでNode名が見やすいように「nx.draw」のオプションに「node_color=’lightblue’」を追加し、Nodeの色を薄い青に変更しておきました。
それでは始めていきましょう。
とりあえず日本語を使ってみる
まずは何も考えずに日本語が使えるか試してみましょう。
import networkx as nx
G = nx.Graph()
G.add_node('あ')
G.add_node('い')
G.add_node('う')
G.add_node('え')
G.add_node('お')
G.add_edge('あ', 'い')
G.add_edge('あ', 'う')
G.add_edge('あ', 'え')
G.add_edge('い', 'え')
G.add_edge('え', 'お')
nx.draw(G, node_color='lightblue', with_labels = True)
実行結果
こんな感じで日本語の部分は□に文字化けしてしまいました。
この現象はMatplotlibで日本語を使った時と同じですね。
NetworkXのフォントの指定方法
それではNetworkXでフォントを指定する方法です。
Matplotlibの時と比べると簡単で「nx.draw」のオプションに「font_family=’フォント名’」を追加するだけです。
MacではMatplotlibで日本語を使った経験から「Hiragino Sans」なら日本語が使えることが分かっているので、こちらのフォントを使ってみましょう。
import networkx as nx
G = nx.Graph()
G.add_node('あ')
G.add_node('い')
G.add_node('う')
G.add_node('え')
G.add_node('お')
G.add_edge('あ', 'い')
G.add_edge('あ', 'う')
G.add_edge('あ', 'え')
G.add_edge('い', 'え')
G.add_edge('え', 'お')
nx.draw(G, node_color='lightblue', with_labels = True, font_family='Hiragino Sans')
実行結果
日本語が表示できました。
もちろん漢字も表示できます。
import networkx as nx
G = nx.Graph()
G.add_node('阿')
G.add_node('伊')
G.add_node('右')
G.add_node('江')
G.add_node('尾')
G.add_edge('阿', '伊')
G.add_edge('阿', '右')
G.add_edge('阿', '江')
G.add_edge('伊', '江')
G.add_edge('江', '尾')
nx.draw(G, node_color='lightblue', with_labels = True, font_family='Hiragino Sans')
実行結果
フォントを指定する際に気をつけること
今回は日本語が使えるフォントで日本語を表示してみましたが、英語の別のフォントを指定し、デザインを変えることももちろんできます。
ただ気をつけるべきことは、「font_family」で指定するのは「フォント名」であって、「フォントのパス」ではないことです。
つまりGoogle Fontsなどでダウンロードしたフォントファイルをこのように直接指定することはできません。
import networkx as nx
G = nx.Graph()
G.add_node('阿')
G.add_node('伊')
G.add_node('右')
G.add_node('江')
G.add_node('尾')
G.add_edge('阿', '伊')
G.add_edge('阿', '右')
G.add_edge('阿', '江')
G.add_edge('伊', '江')
G.add_edge('江', '尾')
nx.draw(G, node_color='lightblue', with_labels = True, font_family='/フォントのパス/ShipporiMincho-Regular.ttf')
実行結果
ご自分の環境でどのフォントが日本語を使えるのかはこちらのサイトで紹介されていますので、よかったらどうぞ。
これでNetworkXを日本語で使えるようになりました。
次回はNetworkxのようにネットワーク図を扱えるもう一つのライブラリpyvisを少しだけいじっていきたいと思います。
ではでは今回はこんな感じで。
コメント