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

发布于 2024-12-02 10:37:02 字数 872 浏览 1 评论 0原文

我正在尝试使用 graphvizdot 命令行工具,更具体地说)生成图形的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南风起 2024-12-09 10:37:02

graphviz 仅支持 SVG 输入,其中使用绝对单位(像素、英寸等)在 上设置 widthheight 属性。 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 and height attributes are set on <svg> using absolute units (pixels, inches etc.). Inkscape outputs height="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.

不喜欢何必死缠烂打 2024-12-09 10:37:02

我遇到了同样的问题,但是 SO 中的这篇文章帮助了我:

graphviz:如果输出是 SVG,则不会插入 SVG 图像的节点

看来 graphviz 仅导入具有以下 XML 标头的 .svg

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

: SVG 的宽度/高度以及定义的视图框,例如:

<svg width="100" height="100" viewBox="0 0 100 100">

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:

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

And also the width/height of the SVG together with the viewbox defined, example:

<svg width="100" height="100" viewBox="0 0 100 100">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文