Python Graphviz

python-graphviz.png

ダウンロード

pypi/graphviz…..pythonのGraphVizライブラリ graphのbgcolor属性がサポートされていない

python graphvizの良いところ!

スタイルの使い回しができる

過去に作った属性たちをそのままコピーできます

drawthread.graph_attr=mainthread.graph_attr

繰り返しfor文の恩恵を受けられる

スタイルが再利用できる

スタイルを示す、graph_attr,edge_attr,node_attrはdictになってます
たとえばこんなかんじ

{'style': 'filled', 'fillcolor': '#335DD366', 'labeljust': 'l'}

なのでスタイルを示すdictを作ってそれをそのまま使えば、同じスタイルを再利用できるのです

# 使い回すスタイルを定義
CELL_STYLE={'style': 'filled', 'fillcolor': '#335DD366', 'labeljust': 'l'}
mygraph=Digraph("cluster_mainThread")
mygraph.graph_attr=CELL_STYLE# ←styleを直接dictで指定!

SubGraphを使って親子関係が複雑な場合は再帰的ノードを作ろう!

class SubGraph:
    def __init__(self,graph_definition):
        self.graph=graph_definition
        self.child_nodes=[]
    """graphvizファイルに実際に書き込みます"""
    def write(self):
        #親子関係を考慮して自動的に順番に子ノードの記述をする
        for node in self.child_nodes:
            node.write()#再起
            self.graph.subgraph(node.graph)
 
    def addChild(self,node):
        self.child_nodes.append(node)

サンプルソースコード

気をつけないといけないこと

日本語を使うとき

> UnicodeEncodeError: 'ascii' codec can't encode characters
のエラーがしつこく出て困りました。
以下の対処法をしたら消えました

#!/usr/bin/env python
# -*- coding: utf-8 -*-
....中略...
dot.node(u"日本語のノード")# 日本語のノード追加するときuを先頭につける
print(dot.source.encode("utf-8"))#.sourceの後もencodeする

subgraphの入れ子にするとき

graph.subgraph(mysubgraph)
する位置に注意です。
どうもこの関数が呼ばれた瞬間に括弧閉じ}するようです。
なので括弧閉じしたいタイミングで呼びましょう。

外側を'で囲って、内側を"で囲うこと

たとえば色をつけるとき

graph.body.append('fillcolor="#335DD366"')

GraphVizではシングルクオーテーションで文字列書こうとコンパイルエラーになります。
ダブルクオーテーションしかだめなようです。
一方pythonでは文字列をどっちで囲ってもokなので
pythonでgraphviz書くときは
  • pythonの文字列はシングルクオーテーション'
  • graphviz内の文字列はダブルクオーテーション"

で書きましょう

view() よりもrender()して.save()

dot.format="png"
dot.render()
dot.save(argv[0][:-3]+".dot")

subgraphの属性はgraph_attr.update()でもok

公式のExampleでゃsubgraphの属性つけるのに
.body.appendを使っていますが、
graph_attr.update()でも最終的な画像の結果は同じです。
.dotファイルの記述内容は変わりますが
これも

mainthread.graph_attr.update(fontsize="14.0")

これも

mainthread.body.append('fontsize=14.0')

最終的な見栄えは同じ!


graphviz python

サポートサイト Wikidot.com graphvizpython