Graphvizの出力サイズ指定 (2)

前回に引き続き、Graphvizの出力サイズ指定に関する説明です。今回はpage属性の指定について説明します。size属性とpage属性を併用することにより、出力サイズの正確な指定が可能となります。動作確認に使用したバージョンは、2.26.3(最新の安定版)です。(前回: id:simply-k:20100804:1280880922)

size属性について

前回の記事で説明したように、size属性を指定すると出力サイズを変更することができます。しかし、出力サイズが指定どおりのサイズになる保証はありませんでした。

page属性について

page属性は、ページサイズの指定に使われる属性です。ただし、グラフを複数ページに分割して出力できるのは、現状ではPostScript形式のみです。それ以外の形式でpage属性を指定した場合、1ページ目のみが出力され、それ以外のページは無視されます。このため、PostScript以外の形式では、通常はpage属性を指定しません。
しかし、page属性には、出力サイズを正確に指定できるという特徴があります。これは、印刷サイズや画面サイズを意識して、特定サイズの画像を出力したい場合に、都合のよい特徴です。そこで、今回の記事では、このpage属性をうまく利用する方法について説明します。

(1)ページ指定なし

ページ指定なしの場合です。ここでは明示的に「page=""」としていますが、書かなくても構いません。

digraph G {
    graph [page=""]
    
    node [fontname="Arial"]
    Size -> Test
}


生成された画像のサイズは、横1インチ×縦2インチくらいでした。

(2)ページ指定 (1ページ)

page属性を指定します。ページ指定なしの場合に横1インチ×縦2インチ程度だったため、これを確実に超えるサイズとして、横2.0インチ×縦3.0インチを指定します。

digraph G {
    graph [page="2.0,3.0"]
    
    node [fontname="Arial"]
    Size -> Test
}


画像が指定サイズ(横2.0インチ×縦3.0インチ)で出力されました。1ページのサイズが十分大きいため、グラフは完全に出力され、余白ができています。

(3)ページ指定 (複数ページ)

page属性を指定します。ページ指定なしの場合に横1インチ×縦2インチ程度だったため、これが確実に収まらないサイズとして、横0.5インチ×縦1.0インチを指定します。

digraph G {
    graph [page="0.5,1.0"]
    
    node [fontname="Arial"]
    Size -> Test
}


画像が指定サイズ(横0.5インチ×縦1.0インチ)で出力されました。ただし、出力されたのは、左下の1ページのみです。*1

(4)サイズ指定とページ指定 (縮小なし)

size属性とpage属性で同じ値を指定します。ページ指定なしの場合に横1インチ×縦2インチ程度だったため、これを確実に超えるサイズとして、横2.0インチ×縦3.0インチを指定します。

digraph G {
    graph [size="2.0,3.0", page="2.0,3.0"]
    
    node [fontname="Arial"]
    Size -> Test
}


画像が指定サイズ(横2.0インチ×縦3.0インチ)で出力されました。size属性を指定すると、グラフが指定サイズに収まるように調整されます。ただし、この例では、元々調整が不要だったため、グラフのサイズは変わっていません。結果的に、(2)と同じ出力となりました。

(5)サイズ指定とページ指定 (縮小あり)

size属性とpage属性で同じ値を指定します。ページ指定なしの場合に横1インチ×縦2インチ程度だったため、これが確実に収まらないサイズとして、横0.5インチ×縦1.0インチを指定します。

digraph G {
    graph [size="0.5,1.0", page="0.5,1.0"]
    
    node [fontname="Arial"]
    Size -> Test
}


画像が指定サイズ(横0.5インチ×縦1.0インチ)で出力されました。また、size属性の影響で、指定サイズにちょうど収まるようにグラフが縮小されました。

(6)中央寄せ (縮小なし)

(4)と同じように、size属性とpage属性を指定します。中央寄せで出力するため、「center=true」を指定します。

digraph G {
    graph [size="2.0,3.0", page="2.0,3.0", center=true]
    
    node [fontname="Arial"]
    Size -> Test
}


(4)のケースと異なり、グラフが中央に出力されています。*2

(7)中央寄せ (縮小あり)

(5)と同じように、size属性とpage属性を指定します。中央寄せで出力するため、「center=true」を指定します。

digraph G {
    graph [size="0.5,1.0", page="0.5,1.0" center=true]
    
    node [fontname="Arial"]
    Size -> Test
}


(5)のケースと異なり、グラフが中央に出力されています。*3

今回のまとめ
  • graphのsize属性とpage属性で同じ値を指定すると、正確な出力サイズ指定が可能となる。
    • 出力サイズは、確実にpage属性で指定したサイズとなる。
    • グラフが1ページに収まる場合、グラフのサイズは変わらない。(余白ができる) *4
    • グラフが1ページに収まらない場合、グラフは出力サイズに合わせて縮小される。
  • center属性をtrueに設定することにより、グラフを中央に出力することができる。


これで、Graphvizの出力サイズ指定に関する説明は終わりです。(前回: id:simply-k:20100804:1280880922)

*1:左下が選ばれたのは、pagedir属性のデフォルト値が「BL(Bottom-Left)」であるためです。

*2:「Test」の下の部分が微妙に切れているのが気になりますが、対処方法はよくわかりませんでした。

*3:「Test」の下の部分が微妙に切れているのが気になりますが、対処方法はよくわかりませんでした。

*4:size属性で感嘆符(!)を付けた場合は拡大されます。詳細は、前回の記事を参照してください。