graphviz绘图转换
当使用graphviz画图保存为.gv格式时,会有pdf生成,但是没有对应的jpg格式。
import numpy as np
import matplotlib.pyplot as plt
import graphviz
from graphviz import Digraph
# 定义节点和边
g = Digraph('RNN Network', filename='rnn_network.gv')
g.attr(rankdir='LR', size='8,5')
with g.subgraph() as s:
s.attr(rank='same')
for i in range(6):
s.node("h"+str(i), label="h"+str(i))
'''
with g.subgraph() as s:
for i in range(5):
s.attr(rank='same')
s.node("x"+str(i+1), label="x"+str(i+1))
s.node("y"+str(i+1), label="y"+str(i+1))
g.edge("h"+str(i), "h"+str(i+1), label="Wh")
g.edge("x"+str(i+1), "h"+str(i+1), label="Wx")
g.edge("h"+str(i+1), "y"+str(i+1), label="Wy")
'''
with g.subgraph() as s1:
s1.attr(rank='same')
for i in range(5):
s1.node("x"+str(i+1), label="x"+str(i+1))
g.edge("x"+str(i+1), "h"+str(i+1), label="Wx")
with g.subgraph() as s2:
s2.attr(rank='same')
for i in range(5):
s2.node("y"+str(i+1), label="y"+str(i+1))
g.edge("h"+str(i+1), "y"+str(i+1), label="Wy")
for i in range(5):
g.edge("h"+str(i), "h"+str(i+1), label="Wh")
# 创建输入、隐藏状态和输出序列
x = np.random.randn(5)
h = np.random.randn(6)
y = np.random.randn(5)
input_dict = {"x"+str(i+1): str(round(x[i],4)) for i in range(5)}
state_dict = {"h"+str(i): str(round(h[i],4)) for i in range(6)}
output_dict = {"y"+str(i+1): str(round(y[i],4)) for i in range(5)}
# 标注每个时间步长的变量
for i, val in enumerate(x):
g.node("x"+str(i+1)+"val", label=str(round(val,4)))
g.edge("x"+str(i+1), "x"+str(i+1)+"val", style="dotted")
for i, val in enumerate(h):
g.node("h"+str(i)+"val", label=str(round(val,4)))
g.edge("h"+str(i), "h"+str(i)+"val", style="dotted")
for i, val in enumerate(y):
g.node("y"+str(i+1)+"val", label=str(round(val,4)))
g.edge("y"+str(i+1), "y"+str(i+1)+"val", style="dotted")
# 显示图形
g.attr(label="""RNN Network\n5 time steps\n%s\n%s\n%s""" % (input_dict, state_dict, output_dict))
g.view()
把.gv文件转换为jpg格式只需要如下命令即可,前提是已经安装好了graphviz,电脑终端运行dot -V有对应的版本的生成,代表已经有了相关环境。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS5kED16-1682516953924)(C:\Users\wang\AppData\Roaming\Typora\typora-user-images\image-20230426203159426.png)]
当有对应的.gv文件时,打开终端,使用如下命令,即可转换为jpg文件,同时也可以指定dpi的大小。生成的图片尺度会变大,分辨率会提高,但是dpi还是没有变化。
dot -Tjpg -Gdpi=300 rnn_network.gv -o rnn_network.jpg
还是没有变化。
dot -Tjpg -Gdpi=300 rnn_network.gv -o rnn_network.jpg
有点奇怪的是,我使用-Gdpi指定dpi时,生成的jpg并不是该dpi大小。