【发布时间】:2016-11-13 02:07:08
【问题描述】:
我有一个非常简单的图表,我想将其绘制为 svg。例如:
# graph.dot
graph {
a -- b;
b -- c;
}
我目前正在使用pydot读取文件然后生成svg文件如下:
import pydot
graphs = pydot.graph_from_dot_file('graph.dot')
graphs[0].write_svg('graph.svg') # there is only 1 graph so the 0 index.
但是,我需要这样做而不需要中间文件 graph.dot 和 graph.svg。我在一个字符串中有graph.dot的代码内容,对应我需要在字符串中输出svg。
我需要类似的东西:
graph_dot = "... ..." # string, I have this
graph_svg = convert_dot_to_svg(graph_dot)
# i need something like convert_dot_to_svg()
我的问题不仅限于 pydot。如果有人知道我可以使用的 web api,那么它也可以。
非常感谢,提前。
【问题讨论】:
-
我从未使用过 pydot(但我知道 Graphviz),但快速浏览一下 pydot 文档表明您可以使用类似文件的对象而不是文件。因此,您应该尝试使用标准 io 模块中的 StringIO 或 BytesIO。
-
@PM2Ring 你说得对,我可以使用
io接受输入。但是如何替换write_svg函数呢? -
@PM2Ring 如前所述,问题不仅限于 pydot 本身。你能告诉我一种在 Graphviz 中获取与点字符串对应的 svg 字符串的方法吗?任何方式都可以。
-
如果
.write_svg接受打开的文件句柄而不是文件名,那么如果您向其提供 StringIO 或 BytesIO 对象,它将“正常工作”。如果您以前从未使用过io模块,我建议您学习文档并进行一些实验;这是一个非常有用的模块。 -
好酷...谢谢:)
标签: python svg graphviz pygraphviz pydot