2
2

More than 1 year has passed since last update.

PythonとGraphvizでグラフを描く_1

Last updated at Posted at 2021-10-03

はじめに

この記事はVisual Studio Code+Python+Graphvizで簡単な図を描くことを目的としています。
図を描くといえばExcelやPowerPointを利用することが一般的ですが、そのように描画した図は再利用が難しい場合があり、かつ過去履歴との差分を比較することも難しいです。
なので、出来るだけテキストベースで図を管理していきたい、というのが本記事のねらいです。

環境

  • Windows10
  • Python 3.7
  • Visual Studio Code

導入

公式サイト の DownloadからStable Windows install packagesを探し、新しいもので自分のPCにあうものをインストールします。
私は64-bit Installerを選択しました。
インストールが完了したら
$ pip install graphviz
とコマンドラインで打ち込みモジュールをインストールしておきます。

作図

まずはざっくりと作ってみます。
ピッコマという漫画アプリで配信されている『今世は当主になります』という漫画の人物相関図をネタにやってみます。

example1.py

import graphviz

dot = graphviz.Digraph(format = 'png', 
comment = "今世は当主になります ~2話 人物相関図")

Digraphは有向グラフ(線に矢印が付くやつ)の意です。これを無向グラフ(ノードを単に線でつないだグラフ)にしたい場合はgraphviz.Graphとします。
formatは出力結果の保存形式を決めます。
さてでは、この有向グラフdotにノードとエッジ(線)を追加していきます。

dot.node('F', 'フィレンティア・ロンバルディ\n主人公')
dot.node('G', 'ギャラハン・ロンバルディ')
dot.node('E', 'フィレンティアの母')

dot.edge('F', 'G', label = '父')
dot.edge('F', 'E', label = '母')

nodeメソッドの中の引数はnameとlabelになります。(labelはなくてもよい)
nameは別にアルファベット1文字である必要はありません。複数文字でも大丈夫です。
edgeメソッドで線を引く時nameを使ってノードごとの識別を行います。
\nは改行として認識されます。
こうして一応形が出来ましたので、次にグラフを出力してみます。

dot.render('./example1.gv', view=True)

ここまで打ち込んだらプログラムを実行します。画面に下図のようなものが表示されるでしょう。

image.png

はい、見事に文字化けしています。
graphvizで日本語を使用する場合フォントを指定する必要があります。
それにはattrメソッドを使います。
コードを追加します。

dot.attr('node', fontname = 'Meiryo UI')
dot.attr('edge', fontname = 'Meiryo UI')

フォントはお好みで。日本語フォントなら何でもいいでしょう。
この指定の仕方から分かるように、ノードとエッジのフォント指定は別々です。

今回は使用していませんがグラフのラベルを指定する時もまた別個にフォント指定が必要です。

この二行を追加した結果がこちら。

image.png

ちゃんと日本語で表示されましたね。
ホントは敵キャラとか色々追加したかったのですがそれはまた次回。

2
2
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
2
2