如何在Graphviz中使用SVG来自定义节点形状?

15

我正在尝试使用graphviz(更具体地说,是命令行工具dot)生成图形的SVG布局。我想使用我用Inkscape生成的SVG文件来定义节点形状,并遵循graphviz教程上的说明。我输出SVG,理论上,通过将形状声明为<symbol>并在图表中使用<use>,这应该很容易做到。这个电子邮件让我相信这个功能已经实现了,但我无法弄清楚如何使用它。

我尝试让节点的image属性指向自定义形状的SVG文件。我还尝试将节点的shape设置为custom,并将shapefile指向形状SVG。如果我放置一个无效的文件名,dot会抱怨,并且它的插件图表表明它可以读取SVG。我猜想我要么使用了错误的属性,要么我尝试的SVG文件存在问题。

不管价值多少,我确实在<svg>属性上设置了viewBox

2个回答

10
graphviz只支持SVG输入,其中<svg>上设置了绝对单位(像素、英寸等)的widthheight属性。Inkscape输出<svg>元素上的height="100%" width="100%" viewBox="0 0 width_in_pixels height_in_pixels"作为属性。

我提交了一个错误报告,graphviz开发人员指向了关于图像属性的帮助文档,其中描述了使用SVG制作自定义节点形状的要求。

5
大部分链接都失效了! :-( 你可以展示一小段你已经修复并且有效的代码吗?谢谢。 - Mayra Delgado

2

我曾经遇到同样的问题,但是Stack Overflow上的这篇文章帮助了我:

graphviz: Nodes of SVG images do not get inserted if output is SVG

看起来graphviz只能导入以下带有XML头部的.svg文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

同时,SVG的宽度/高度和视口也要一起定义,例如:
<svg width="100" height="100" viewBox="0 0 100 100">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接