如何在 graphviz 中使用 SVG 自定义节点形状?
我正在尝试使用 graphviz (dot
命令行工具,更具体地说)生成图形的 SVG 布局。我想使用 Inkscape 生成的 SVG 文件来定义节点形状,并且按照 graphviz 教程。我正在输出 SVG,因此理论上,通过将形状声明为
并在图表中 来实现这一点应该很容易。 这封电子邮件让我相信该功能是已实现,但我只是不知道如何使用它。
我尝试让节点的 image
属性指向自定义形状 SVG 文件。我还尝试将节点的 shape
设置为 custom
并将 shapefile
指向形状 SVG。如果我输入无效的文件名,dot
会抱怨,并且它的插件图表明它可以读取 SVG。我猜测要么是我使用了错误的属性,要么是我尝试过的 SVG 文件有问题。
不管它的价值如何,我确实在 属性上设置了
viewBox
。
I'm trying to use graphviz (the dot
command-line tool, to be more specific) to generate a SVG layout of a graph. I would like to use my Inkscape-generated SVG files to define node shapes, and I followed the instructions on the graphviz tutorial. I'm outputting SVG so, in theory, this should be easy to do by declaring the shapes as <symbol>
s and <use>
ing them in the diagram. This e-mail makes me believe that the functionality was implemented, and I just can't figure out how to use it.
I tried having a node's image
attribute pointing to the custom shape SVG file. I also tried setting the node's shape
to custom
and pointing the shapefile
to the shape SVG. dot
complains if I put an invalid file name, and its plugin graph suggests that it can read SVG. I'm guessing that either I'm using the wrong attributes, or there's something wrong with the SVG files that I have tried.
For whatever it's worth, I do have viewBox
set on the <svg>
attribute.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
graphviz 仅支持 SVG 输入,其中使用绝对单位(像素、英寸等)在
上设置
width
和height
属性。 Inkscape 输出height="100%" width="100%" viewBox="0 0 width_in_pixels height_in_pixels"
作为元素上的属性。
我提交了错误报告,graphviz 开发人员向我指出了 < a href="http://www.graphviz.org/content/attrs#dimage" rel="noreferrer">图像属性帮助,描述了在自定义节点形状中使用 SVG 的要求。
graphviz only supports SVG input where the
width
andheight
attributes are set on<svg>
using absolute units (pixels, inches etc.). Inkscape outputsheight="100%" width="100%" viewBox="0 0 width_in_pixels height_in_pixels"
as attributes on the<svg>
element.I filed a bug report, and a graphviz developer pointed me to the help for the image attribute, which describes the requirements for using SVG in custom node shapes.
我遇到了同样的问题,但是 SO 中的这篇文章帮助了我:
graphviz:如果输出是 SVG,则不会插入 SVG 图像的节点
看来 graphviz 仅导入具有以下 XML 标头的 .svg
: SVG 的宽度/高度以及定义的视图框,例如:
I had the same issue, but this post in SO helped me:
graphviz: Nodes of SVG images do not get inserted if output is SVG
It seems graphviz imports only .svg with the below XML header:
And also the width/height of the SVG together with the viewbox defined, example: