PythonのGraphviz描画

今日の体験

経験は言うまでもありませんが、graphviz ライブラリの学習には、人々を笑わせ、泣かせる旅が伴います。
最近、クラス設計を始めました。テーマはハフマンコーディングです。ツリーの構造を出力する方法はないだろうかと考えました(実際、ツリーを出力する必要がある実験がありましたが、それは不可能でした)その時)、たまたまgraphvizライブラリについて触れているブログを見つけたので覗いてみたら、色々な図形やフローチャートを印刷できることが分かり、唖然とするほど興奮しました。
そこで、すぐに pip installgraphviz を実行すると、ライブラリはすぐにダウンロードされますが、とにかく絵が描けません。1 時間近く悩んだ後、兄貴のブログで、graphviz を環境変数に追加する必要があることがわかりました。・・・要するに
、 問題が起きるとかなりメンタルが壊れますが、問題が解決した瞬間は本当に嬉しいんです!

graphviz のインストールと構成

公式Webサイトにアクセスしてダウンロードします: https://graphviz.org/download/
(基本的にバージョンは使用に影響しません。どのバージョンでも使用できます)
ダウンロード後、インストールプロセスが行われます。次はすべて完了です。PATH を追加するには必ずチェックを入れてください
チェックされていない場合は、環境変数のパスに手動で追加することを忘れないでください。そうしないと、私のように不幸になります。
さらに、環境変数を追加した後は、コンパイラを再起動する必要があります。そうしないと役に立ちません。
参加後は次のようになります。
画像の説明を追加してください

ドットとグラフビズ

ドット

dot はテキスト グラフィック記述言語です。記述された .dot ファイルは機械で画像に処理でき、通常は .png、.jpg、.pdf などの形式を生成できます。

グラフビズ

graphviz は Python のオープンソースライブラリであり、dot のさまざまな操作がgraphviz に含まれています。
graphviz を使用すると、簡単なフローチャートを描画できます。
私の意見では、データ構造のツリーやグラフを描くのは非常に便利です。

描画

ステップ1:graphvizライブラリをインポートする

from graphviz import Digraph  # 导入graphviz库

ステップ: テーブルを作成する

dot = Digraph(name, comment)

ポイントを追加する

dot.node(name, label)

点間にエッジを作成する

dot.edge(tail_name, head_name, label)

出力図面

dot.view()

画像ファイルを生成する

print(dot.source) 
render(filename=None, directory=None, view=False, cleanup=False)
# 参数分别为文件名、文件保存路径、是否用默认程序打开渲染效果、是否在渲染后删除源文件

サンプル

from graphviz import Digraph  # 导入graphviz库

dot = Digraph("lmy's table", comment='The Test Table')  # 创建一个表

dot.node('A', 'Dot A')  # 添加一个点,点的名称为'Dot A'

dot.node('B', 'Dot B')

dot.node('C', 'Dot C')

dot.node('D', 'Dot D')

dot.edges(['AD', 'AC', 'BC'])  # 两点间创建边

dot.edge('B', 'C', 'test')
# dot.view(),此函数可以实时看到你画的图


# 获取DOT source源码的字符串形式
print(dot.source)
# // The Test Table
# digraph {
    
    
#   A [label="Dot A"]
#   B [label="Dot B"]
#   C [label="Dot C"]
#   A -> B
#   A -> C
#   A -> B
#   B -> C [label=test]
# }

# 保存source到文件,并提供Graphviz引擎
dot.render('test-output/lmy.gv', view=True)

実行結果:
PDFファイルが生成されたことが確認できます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_52109814/article/details/122147768