Ubuntu 20.04上でGraphvizを用いる
はじめに_
グラフを簡単に描画するためのソフトウェアGraphvizを利用する。
インストール_
aptでインストールする。まず、パッケージにあるかどうか確かめる。
% sudo apt search ^graphviz$ ソート中... 完了 全文検索... 完了 graphviz/focal,now 2.42.2-3build2 amd64 rich set of graph drawing tool
インストールする。
% sudo apt install -y graphviz
Graphvizはdotというコマンド名でインストールされている。
% which dot /usr/bin/dot % dot -V dot - graphviz version 2.43.0 (0)
例題:証明木の作成_
埼玉大学工学部情報工学科2年生向け講義「プログラミング言語論」で登場する、評価意味論の証明木を描画してみる。
作業ディレクトリの作成_
作業ディレクトリを作成する。
% cd % mkdir -p ~/Sandbox/Graphviz % cd ~/Sandbox/Graphviz
DOT言語での記述_
GraphvizではDOT言語という形式言語で描画するグラフを指定する。 以下のページでは詳しく説明してくれている。
DOTファイルを用意する。
% touch example.dot
Graphvizとdot言語でグラフを描く方法のまとめを参考に証明木を書いてみた。example.dotの中身を以下のものにする。(ダウンロード)
digraph graph_name {
graph [
charset = "UTF-8";
label = "証明木",
labelloc = "t",
labeljust = "c",
bgcolor = "#343434",
fontcolor = white,
fontsize = 18,
style = "filled",
rankdir = TB,
margin = 0.2,
splines = spline,
ranksep = 1.0,
nodesep = 0.9
];
node [
colorscheme = "rdylgn11"
style = "solid,filled",
fontsize = 16,
fontcolor = 6,
fontname = "Migu 1M",
color = 7,
fillcolor = 11,
fixedsize = true,
height = 0.6,
width = 3,
];
edge [
style = solid,
fontsize = 14,
fontcolor = white,
fontname = "Migu 1M",
color = white,
labelfloat = true,
labeldistance = 2.5,
labelangle = 70
];
// node define
alpha [label = "ρ |- (x * z) - (y + z) => 3\n(OpR)",shape = box];
beta [label = "ρ |- (x * z) => 8\n(OpR)",shape = box];
gamma [label = "ρ |- (y + z) => 5\n(OpR)",shape = box];
delta [label = "ρ |- x => 4 \n(VarR)",shape = box];
epsilon [label = "ρ |- z => 2 \n(VarR)",shape = box];
zeta [label = "ρ |- y => 3 \n(VarR)",shape = box];
eta [label = "ρ |- z => 2 \n(VarR)",shape = box];
// edge define
alpha -> beta [arrowhead = normal];
alpha -> gamma [arrowhead = normal];
beta -> delta [arrowhead = normal];
beta -> epsilon [arrowhead = normal];
gamma -> zeta [arrowhead = normal];
gamma -> eta [arrowhead = normal];
}
画像ファイルを生成する_
画像ファイルは以下のように生成する。
% dot -T画像形式 DOTファイル名 -o 出力する画像ファイル名
SVG画像(Webブラウザなどで閲覧できる)の場合は以下のようにする。
% dot -Tsvg example.dot -o example.svg
生成される画像は以下のようになる。
PNG画像の場合は以下のようにする。
% dot -Tpng example.dot -o example.png
生成される画像は以下のようになる。
JPEG画像の場合は以下のようにする。
% dot -Tjpg example.dot -o example.jpg
生成される画像は以下のようになる。