DOT 可以生成更结构化的图表吗?

2023-12-01

我不太确定如何描述我的客户想要什么,所以我会让一张图片来说明大部分内容。我正在使用 DOT 生成或多或少的物料清单问题的图表。 (显示所有级别的传入批次和所有传出批次,这些批次是根据传入批次中的材料创建的。)我已经获得了创建包含适当结构化数据的图表的代码。例如,我生成这个GV文件:

digraph LotTrc {
  rankdir=LR;
  graph[label="Lot #AD626", labelloc=top, labeljust=left, fontsize=24];
   PO_AD626_0000003333[shape=triangle,color=greenyellow,style=filled,label=AD626];
   AJ_AD626_SJ00000099[shape=circle,color=red2,style=filled,label=AD626];
   PO_AD626_0000003333  -> AJ_AD626_SJ00000099;
   AJ_AD626_SJ00000103[shape=circle,color=red2,style=filled,label=AD626];
   PO_AD626_0000003333  -> AJ_AD626_SJ00000103;
   WO_AD627_RE00002230[shape=ellipse,color=lemonchiffon,style=filled,label=AD627];
   PO_AD626_0000003333  -> WO_AD627_RE00002230;
   SO_AD627_OZ00025429[shape=box,color=cyan3,style=filled,label=AD627];
   WO_AD627_RE00002230  -> SO_AD627_OZ00025429;
   SO_AD627_OZ00025434[shape=box,color=cyan3,style=filled,label=AD627];
   WO_AD627_RE00002230  -> SO_AD627_OZ00025434;
   SO_AD627_OZ00025439[shape=box,color=cyan3,style=filled,label=AD627];
   WO_AD627_RE00002230  -> SO_AD627_OZ00025439;
   SO_AD627_OZ00025444[shape=box,color=cyan3,style=filled,label=AD627];
   WO_AD627_RE00002230  -> SO_AD627_OZ00025444;
   WO_AD628_RE00002231[shape=ellipse,color=lemonchiffon,style=filled,label=AD628];
   PO_AD626_0000003333  -> WO_AD628_RE00002231;
   SO_AD628_OZ00025430[shape=box,color=cyan3,style=filled,label=AD628];
   WO_AD628_RE00002231  -> SO_AD628_OZ00025430;
   SO_AD628_OZ00025435[shape=box,color=cyan3,style=filled,label=AD628];
   WO_AD628_RE00002231  -> SO_AD628_OZ00025435;
   SO_AD628_OZ00025440[shape=box,color=cyan3,style=filled,label=AD628];
   WO_AD628_RE00002231  -> SO_AD628_OZ00025440;
   SO_AD628_OZ00025445[shape=box,color=cyan3,style=filled,label=AD628];
   WO_AD628_RE00002231  -> SO_AD628_OZ00025445;
   WO_AD629_RE00002232[shape=ellipse,color=lemonchiffon,style=filled,label=AD629];
   PO_AD626_0000003333  -> WO_AD629_RE00002232;
   SO_AD629_OZ00025431[shape=box,color=cyan3,style=filled,label=AD629];
   WO_AD629_RE00002232  -> SO_AD629_OZ00025431;
   SO_AD629_OZ00025436[shape=box,color=cyan3,style=filled,label=AD629];
   WO_AD629_RE00002232  -> SO_AD629_OZ00025436;
   SO_AD629_OZ00025441[shape=box,color=cyan3,style=filled,label=AD629];
   WO_AD629_RE00002232  -> SO_AD629_OZ00025441;
   SO_AD629_OZ00025446[shape=box,color=cyan3,style=filled,label=AD629];
   WO_AD629_RE00002232  -> SO_AD629_OZ00025446;
   WO_AD630_RE00002233[shape=ellipse,color=lemonchiffon,style=filled,label=AD630];
   PO_AD626_0000003333  -> WO_AD630_RE00002233;
   SO_AD630_OZ00025432[shape=box,color=cyan3,style=filled,label=AD630];
   WO_AD630_RE00002233  -> SO_AD630_OZ00025432;
   SO_AD630_OZ00025437[shape=box,color=cyan3,style=filled,label=AD630];
   WO_AD630_RE00002233  -> SO_AD630_OZ00025437;
   SO_AD630_OZ00025442[shape=box,color=cyan3,style=filled,label=AD630];
   WO_AD630_RE00002233  -> SO_AD630_OZ00025442;
   SO_AD630_OZ00025447[shape=box,color=cyan3,style=filled,label=AD630];
   WO_AD630_RE00002233  -> SO_AD630_OZ00025447;
   WO_AD631_RE00002234[shape=ellipse,color=lemonchiffon,style=filled,label=AD631];
   PO_AD626_0000003333  -> WO_AD631_RE00002234;
   SO_AD631_OZ00025433[shape=box,color=cyan3,style=filled,label=AD631];
   WO_AD631_RE00002234  -> SO_AD631_OZ00025433;
   SO_AD631_OZ00025438[shape=box,color=cyan3,style=filled,label=AD631];
   WO_AD631_RE00002234  -> SO_AD631_OZ00025438;
   SO_AD631_OZ00025443[shape=box,color=cyan3,style=filled,label=AD631];
   WO_AD631_RE00002234  -> SO_AD631_OZ00025443;
   SO_AD631_OZ00025448[shape=box,color=cyan3,style=filled,label=AD631];
   WO_AD631_RE00002234  -> SO_AD631_OZ00025448;

}

and it produces this graph: enter image description here

但我的客户真正想要的是看起来更像这样的东西,边缘是直线,根据需要使用 90 度角。 (请注意,这是通用的,并非基于上面的示例。)

enter image description here

有没有办法使用 DOT 来生产类似的东西?


你可以尝试一下splines=ortho图形属性。它使连接器非常直,具有 90 度角。

但我不会推荐它。控制它们几乎是不可能的,端口规范通常不适用于它们,而且正交样条可能会消耗一些边缘标签。

可能的解决方案将使用虚拟节点point形状(此形状很方便,因为它默认删除节点标签)和width=0。在需要 90 度转弯的地方使用这些虚拟节点。您必须将它们与子图中的主节点分组并添加rank=same属性强制这些节点保持在同一水平。

您可能还需要添加weight一些边缘以防止它们弯曲(重量较大的边缘往往是直的)。

Example

我已经使用上述技术实现了示例图的一部分,代码和图像如下:

digraph {
    rankdir=LR
    ranksep=1
    nodesep=0.5

    LOT1 [shape=rect]
    LOT2 [shape=rect]
    LOT3 [shape=rect]
    LOT4 [shape=rect]
    LOT5 [shape=rect]

    {rank=same
        PO
        dot1 [shape=point width=0]
        dot2 [shape=point width=0]
        PO -> dot1 -> dot2 [arrowhead=none]
    }
    dot1 -> WO1 [weight=20]
    {
        rank=same
        WO1
        dot21  [shape=point width=0]
        dot22  [shape=point width=0]
        WO1 -> dot21 -> dot22 [arrowhead=none]
    }
    dot21 -> LOT1 [weight=20]
    dot22 -> LOT2 [weight=20]
    {
        rank=same
        dot31 [shape=point width=0]
        dot32 [shape=point width=0]
        dot33 [shape=point width=0]
        dot31 -> dot32 -> dot33 [arrowhead=none]
    }
        dot2 -> WO2 [weight=20]
    {
        WO2
        rank=same
        dot23 [shape=point width=0]
        dot24 [shape=point width=0]
        dot25 [shape=point width=0]
        WO2 -> dot23 -> dot24 -> dot25 [arrowhead=none]
    }
    dot23 -> LOT3 [weight=20]
    dot24 -> LOT4 [weight=20]
    dot25 -> LOT5 [weight=20]
    dot31 -> SO1
    dot33 -> SO2
    LOT1 -> dot32
}

Result:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DOT 可以生成更结构化的图表吗? 的相关文章

  • 如何创建实体关系图(ERD)

    有谁知道在 R 中创建实体关系图 ERD 的简单方法除了graphviz和 或DiagrammeR 我不经常使用 graphviz 并且经常花费比我想记住它的语法更多的时间来创建一个简单的图形 我想创造一些类似于 Hadley Wickha
  • 捕获 pygraphviz 图像渲染而不保存到文件?

    pygraphviz 是否允许您将图像渲染到变量 我想通过网页提供动态图像 而无需将图形渲染到磁盘 根据到源代码 https github com pygraphviz pygraphviz blob 1f7f314530080c152a4
  • 子图有相同的节点,如何使其唯一

    我通过 perl 脚本创建点文件 这是包含相同节点的子图 例如 subgraph aa gt bb gt cc subgraph dd gt bb gt ee 我知道这些子图使用相同的命名空间 所以我的结果输出很混乱 在每个子图中 我可以使
  • CMake graphviz 自动生成

    我知道通过 CLI 生成 CMake 项目依赖关系图的常用方法 cmake graphviz file 但是有没有一种方法可以通过在 CMakeList 中设置标志或命令来自动生成它 这个想法是让 CMakeLists txt 本身触发图形
  • 在graphviz中从节点到边绘制边

    是否可以在 graphviz 中从节点绘制一条边到现有边的中心 我想复制化学或生物网络中常见的这种类型的反应图 Thanks Peter 是的 您可以使用不可见节点 例如这个例子 https stackoverflow com questi
  • order Graphviz - 固定子图

    我喜欢创建一个像这样的 3 柱形图 Code digraph g rankdir LR node shape circle fontsize 14 fontsize 18 labeljust l rank same edge style i
  • Graphviz - 如何使标签中的文本左对齐?

    我正在使用 graphviz 来可视化我正在解析的语言的 AST 我想包含源代码 作为标签 但 graphviz 对齐标签内的文本 这会扰乱我的缩进 并且代码对缩进敏感 这是问题的示例 第二行代码不应缩进 这是生成的 dot 文件的相关部分
  • Java图形布局算法

    在我的 Java 应用程序中 我需要某种布局算法 第一种方法如下 需要安装Graphviz包 创建点文件 从java应用程序调用graphviz并解析输出 布局 使用 graphviz 的布局显示图形 属性点 但这个解决方案需要在运行的机器
  • Graphviz安装Ubuntu 14.04

    我正在尝试使用创建一个点文件京东项目 http javaddlib sourceforge net jdd 它需要安装 Graphviz 我尝试使用控制台安装它 sudo apt get install graphviz 在这种情况下 虽然
  • 在 .dot 树中强制执行水平节点排序

    我正在尝试使用 GraphViz 重新创建二叉搜索树的示例图 它最终应该是这样的 这是我的第一次尝试 digraph G nodesep 0 3 ranksep 0 2 margin 0 1 node shape circle edge a
  • graphviz 中跨越多行的记录

    我试图用点语言可视化一个相当复杂的结构 因为记录很大 所以我想把代码写成多行 所以而不是 A11 label A 11 Access Control A 11 1 Business requirements for access contr
  • 如何将点的图形属性添加到最终的点输出中

    我在 python 项目中使用 NetworkX 库创建图形表示 制作有向图我需要向我们的图输出添加一个属性 等级目录 LR 所以我正在编写代码 import networkx as nx graph nx DiGraph rankdir
  • Graphviz中如何使边重叠?

    我想在 graphviz 中使边缘重叠 但 graphviz 似乎重新排列了叶节点以避免重叠 我可以强制 graphviz 停止重新排列节点吗 制作 Desired 我正在使用 pygraphviz 创建树 使用以下方法额外的隐形边缘非常适
  • 在 Windows、Python 2.7 上安装 PyGraphViz

    我无法在 Windows XP 上安装 pygraphviz 我正在使用Python27 在启动安装之前 我已经更改了 setup py 文件的这两个变量 library path C Archivos de programa Graphv
  • 如何通过消除蛇行和更好的边缘交叉来影响 Graphviz/dot 来制作更好的控制流图?

    我正在为 Python 程序绘制控制流图 并希望影响哪种边缘不 应交叉 有没有办法做到这一点 考虑这个简单的 Python 程序 try a 1 except a 2 else a 3 以及一个点程序来表示通过生成的控制流https git
  • Graphviz 允许边缘节点重叠

    我想在项目中使用 graphviz 但无法获得我想要的行为 我有一个可以用 graphviz 绘制的图表 但我也有同一个图表的一个版本 它有一些额外的边 我希望绘制第二个图时 节 点与第一个图的位置相同 边缘也位于相同的位置 但绘制新的边缘
  • 将 doxygen 的图表从上到下方向翻转为从左到右

    doxygen 图为 includes and 包含在 创建的嵌套深度从上到下递增 使用 1 8 5 由于我们的图大多是带有许多节点的浅图 这会导致非常宽的图和丑陋的水平滚动条 有没有办法教 doxygen 以从左到右的方向创建这些图 就像
  • 从节点内部开始一条边

    digraph foo a label
  • Graphviz:除了标签之外,还在节点上添加标题

    在我的 Graphviz 图中 用 DOT 编写 我希望每个节点都有一个标签 但除此之外 我还希望某些节点有一个小标题 表示该节点的一些其他唯一值 例如 如果这是一个历史图 则节点的标签可能类似于 乔治 华盛顿的诞生 标题可能为 另请参阅
  • 如何让 graphviz 记录的单元格对齐

    我正在 graphviz 中使用记录节点来制作一个简单的表格 但它看起来错误 digraph g node shape record height 08 node1 label DBAT 0 1 2 3 4 5 6 7 8 9 10 11

随机推荐

  • 如何对多列进行计数(不同)

    这不起作用 select count distinct colA colB from mytable 我知道我可以通过双重选择来简单地解决这个问题 select count from select distinct colA colB fr
  • ASP.NET:WCF 和无法加载文件或程序集“App_Web_hamznvwf”

    我最近开始使用支持 AJAX 的 WCF 并且一直受到这个 NET 缓存问题的困扰 无法加载文件或程序集 App Web hamznvwf 我的服务器每天会遇到 4 到 5 次这样的问题 Win 2003 看第一篇文章 因此 我将文件从服务
  • 远程服务器命令执行

    在远程服务器上执行 shell 命令并在不实际登录的情况下获取输出的最佳方法是什么 也许用 ssh 密钥 最好用python 你的意思是不登录manually 因为实际上允许您在根本不登录的情况下执行命令的服务器将带来巨大的安全风险 看起来
  • 使用 XML 数据类型读取存储在 SQL Server 2008 R2 中的 XML 文档

    我正在使用 SQL Server 2008 R2 和 ASP NET 3 5 我在 SQL 端以 XML 形式存储数据表 NET 列的数据类型为 XML 这是将 XML 存储在 SQL Server 的表列中的示例
  • 在 vb.net 中显示加载屏幕

    当长时间的进程正在运行时 我需要显示一个屏幕或其他内容 说 正在加载 或其他内容 我正在使用 Windows Media Encoder SDK 创建一个应用程序 需要一段时间来初始化编码器 我希望在启动编码器时弹出一个屏幕 显示 正在加载
  • AttachNotSupportedException:没有提供者安装 java 代理

    我在将 Java 应用程序附加到远程 Java 虚拟机时遇到问题 我在 Windows 7 上使用 java 8u45 并且我的附加代码非常简单 import java io IOException import java util Lis
  • 在 C++ 中将数组传递给函数

    include
  • JPA RollbackException 但不在单元测试中

    我有一个 java 项目 其中包含一组单元测试 这些单元测试使用 JPA2 执行简单的更新和删除 单元测试运行没有问题 我可以验证数据库中的更改 一切都很好 我尝试在处理程序 Smartfox 扩展 中复制 粘贴相同的函数 我收到回滚异常
  • 我应该针对哪个版本的 Android 进行开发? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 刚刚开始为 Android 开发 想法是创建一个在 A
  • Flask sqlalchemy 多对多插入数据

    我试图在这里建立多对多关系Flask SQLAlchemy 但似乎不知道如何填写 多对多标识符数据库 您能帮助我了解我做错了什么以及它应该是什么样子吗 class User db Model tablename users user id
  • 如何使用 Applescript 构建和运行 Xcode?

    我正在尝试让 Xcode 使用 Applescript 构建和运行我的项目 这是同样的问题如何使用 Applescript 构建和运行 Xcode 但我认为这个答案可能已经过时了 因为它在我的机器上不起作用 我明白了 execution e
  • iOS CALayerInvalidGeometry

    我的应用程序崩溃了 并显示以下消息 由于未捕获的异常 CALayerInvalidGeometry 而终止应用程序 原因 CALayer 位置包含 NaN 2 74665e 34 nan 这里有更详细的异常消息 CALayer positi
  • 为什么碰撞不起作用,cocos2d v3?

    我用 cocos2d v3 创建了像 flappybird 这样的简单游戏 接口类 interface GameScene CCScene
  • 什么时候使用 CRC 比 MD5/SHA1 更合适?

    何时适合使用 CRC 进行错误检测 而不是使用 MD5 或 SHA1 等更现代的哈希函数 前者更容易在嵌入式硬件上实现吗 CRC 可以很好地检测数据中可能出现的随机错误 例如网络干扰 线路噪声 失真等 CRC 的计算复杂度远低于 MD5 或
  • 默认显示 Visual Studio 扩展工具栏

    在 Visual Studio 扩展中 我在 vsct 文件中将工具栏定义为 menu type Toolbar menu
  • 在什么情况下使用 EJB?网站/网络应用程序开发需要它们吗?

    EJBS 是否用于数据库支持的网站 所有人都可以访问 没有什么是永远的required当然 如果你愿意 你可以构建一个 Web 应用程序作为背后的单个大型 C 函数CGI 也就是说 EJB 确实使 Web 应用程序开发变得更加容易 它们被纳
  • SwiftUI 父子绑定:@StateObject 中的 @Published 不起作用,而 @State 起作用

    我有一个来自的自定义模态结构这个问题 代码如下 某些属性在模态视图中进行了修改 并通过Binding 问题是 当房产来自 StateObject Published更改不会反映在模式视图中 当使用一个简单的 State 最小示例 完整代码
  • 避免在使用层次结构参数的操作中进行静态绑定

    我发现了一个关于静态绑定的问题 我的真实课程非常扩展 所以我将使用几个玩具课程来表达我的问题 我们假设我们有以下层次结构 public class Element public class Element1 extends Element
  • 添加(减去)月份但不超过新月份的最后一天

    我希望可靠地添加和减去六个月 债券时间 lubridate 例如 添加六个月12 31 2014应该导致6 30 2015 并添加到2 28 2014应该导致8 31 2014 问题与as Date 2014 12 31 months 6
  • DOT 可以生成更结构化的图表吗?

    我不太确定如何描述我的客户想要什么 所以我会让一张图片来说明大部分内容 我正在使用 DOT 生成或多或少的物料清单问题的图表 显示所有级别的传入批次和所有传出批次 这些批次是根据传入批次中的材料创建的 我已经获得了创建包含适当结构化数据的图