なぜiGraphを使用したかというと読んでいた参考書で使っていたから。
iGraphをpythonで使うにするのがそもそもやや煩雑だった。
- iGraphは内部でcario使っているからcarioインストールする必要ある
- iGraphをpythonから使うためのインターフェイスであるpython-igraphも必要
- pythonでcario使うにはpycairo(anacondaはcondaコマンドで楽できる)、cairocffiあたりも必要
以下コマンドを叩けば環境は用意できるはず。
brew install igraph
brew install cairo --use-clang
pip install python-igraph
conda install -c conda-forge pycairo
pip install cairocffi
で、試しにグラフ描画する。
from igraph import *
vertices = ["山田", "Tanaka", "Suzuki", "Sato", "Ito", "Obokata"]
edges = [(0,1),(1,3),(1,4),(1,5),(2,5),(3,5),(4,3),(0,5)]
g = Graph(vertex_attrs={"label": vertices}, edges=edges, directed=True)
plot(g, vertex_size=30, bbox=(800, 800),vertex_color='white')
しかし、日本語が表示されない。↑のケースだと山田が存在しない。
原因はライブラリであるigraph/drawing/graph.py
のDefaultGraphDrawer
クラスに以下のようにフォントがハードコードされているためだった。
context.select_font_face("sans-serif", cairo.FONT_SLANT_NORMAL, \
cairo.FONT_WEIGHT_NORMAL)
これを以下のように修正した。
context.select_font_face("Hiragino Sans", cairo.FONT_SLANT_NORMAL, \
cairo.FONT_WEIGHT_NORMAL)
これで日本語(山田)が表示されるようになった。