Graphviz .dot 节点排序

2024-02-10

我正在构建一个 epsilon NFA 来使用规范结构识别正则表达式。我使用子图对正则表达式的各个部分进行分组。 * 运算符给我带来了特别的麻烦,因为 dot 决定移动节点的顺序。我尝试添加边缘权重以强制特定边缘变短以保持边缘的顺序一致,但这似乎不起作用。

我想做的是强制子图中的节点按特定顺序放置,以便输出图可被识别为特定类型的(众所周知的)构造。在下面的示例中,我希望边 3、4、5 和 6 按该顺序放置,但是点将它们按 6、3、4、5 的顺序放置。任何指针都会受到赞赏。

请注意,当前权重参数与根本没有权重参数没有产生任何差异。

我有以下内容

digraph G {
    rankdir = LR;
    node [shape = none];
            0 [label = "start"];
    node [shape = circle];
            1 [label = "q1"];
            2 [label = "q2"];
            3 [label = "q3"];
            4 [label = "q4"];
            5 [label = "q5"];
    node [shape = doublecircle];
            6 [label = "q6"];
    subgraph re1 {
            rank = same;
            edge[label = "0"];
            1 -> 2;
    };
    subgraph re2 {
            rank = same;
            edge[label = "ε"];
                    3 -> 4 [weight = 10];
            edge[label = "1"];
                    4 -> 5 [weight = 10];
            edge[label = "ε"];
                    5 -> 6 [weight = 10];
                    5 -> 4 [weight = 1];
                    6 -> 3 [weight = 1];
    };
    edge[color=black];
            0 -> 1
    edge[label = "ε"];
            2 -> 3;
}

这是我编写该图的方式:

  • 首先,对我来说,这是一个从上到下的图表,而不是从左到右,因此我删除了rankdir=LR并添加了rank=same仅适用于节点 0/1 和节点 2/3。
  • 我去掉了所有的重量
  • 最重要的是我补充说constraint=false到与图的方向相反的边 - 从节点 4 到节点 5 的边,以及从节点 6 到节点 3 的边。

这里是来源:

digraph G {
    0 [label = "start", shape = none]; 
    node [shape = circle];
    1 [label = "q1"];
    2 [label = "q2"];
    3 [label = "q3"];
    4 [label = "q4"];
    5 [label = "q5"];
    6 [label = "q6", shape = doublecircle];

    {rank = same; 0 -> 1; }
    1 -> 2 [label = "0"];
    {rank = same; 2 -> 3 [label = "ε"]; }
    4 -> 5 [label = "1"];
    edge [label = "ε"];
    3 -> 4;
    5 -> 6;
    5 -> 4 [constraint = false];
    6 -> 3 [constraint = false];
}

结果如下:

现在,如果你愿意,你可以保留rankdir=LR,只需获取您发布的标记,删除权重并添加constraint=false与我一样的边缘,它也有效。

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

Graphviz .dot 节点排序 的相关文章

  • 平面图布局

    布局图形时有哪些边缘重叠最小化技术 最好与 GraphViz 相关 还有现有的软件可以以平面方式布局图形吗 当前布局 http www evecakes com doodles master gif http www evecakes co
  • 从 Java 应用程序创建带有下标的 Graphviz 标签

    我正在使用 Java 应用程序调用 GraphvizGraphviz java https github com jabbalaci graphviz java apiAPI 并将输出图形保存到 PDF 文件 我需要用数学下标和重音符号来标
  • 节点的 xlabels 与点中的边缘重叠

    我尝试使用 dot 绘制图表 但遇到以下问题 节点的标签b与边缘重叠a to b 有没有办法以某种方式移动这个标签来避免这种情况 这是我用来生成图像的代码 使用dot digraph A rankdir LR center true mar
  • 如何创建实体关系图(ERD)

    有谁知道在 R 中创建实体关系图 ERD 的简单方法除了graphviz和 或DiagrammeR 我不经常使用 graphviz 并且经常花费比我想记住它的语法更多的时间来创建一个简单的图形 我想创造一些类似于 Hadley Wickha
  • 环边太长

    在下面的点图中 之间的边handleClick and onSelect in COLOROPTION太长了 如何将其变成紧密循环 如果也这样就更好了DIV离右边有点远COLOROPTION 循环边是option p4 e gt optio
  • Graphviz .dot 节点排序

    我正在构建一个 epsilon NFA 来使用规范结构识别正则表达式 我使用子图对正则表达式的各个部分进行分组 运算符给我带来了特别的麻烦 因为 dot 决定移动节点的顺序 我尝试添加边缘权重以强制特定边缘变短以保持边缘的顺序一致 但这似乎
  • graphviz 中的自循环边缘太短且难看

    我用graphviz画了一张图 请参见FSM https i stack imgur com bsVUW png 我认为它很丑 因为自环边缘太短 边缘的属性 minlen 对我不起作用 我尝试了节点的几个端口 但除了我当前的实现之外 一切都
  • 如果我使用 DOT 和 doxygen,如何更改由 graphviz 创建的图表在 HTML 中的位置?

    我在 doxygen 中使用 dot 和 Graphviz 以 HTML 格式创建代码的用户手册 doxygen 代码看起来有点像这样 br addtogroup MainProgram dot digraph G Main label M
  • Graphviz 和 Brew doctor - 意外的 dylibs 错误

    刚刚做了一个brew install graphviz在 Mountain Lion 上 这给了我这个错误 错误 执行失败 make install graphviz rb 47 以为我只是卸载它 所以跑了brew uninstall gr
  • Python 决策树 GraphViz

    我正在尝试使用 scikit learn 实现决策树 然后使用 Graphviz 可视化该树 我认为这是可视化 DT 的标准选择 我正在使用 PyCharm anaconda Python 2 7 和 OS X El Capitan 据我所
  • GraphViz:仅修复节点的 y 位置

    我想固定节点的 y 位置 但根据力方向自动对齐 x 位置 每个 y 位置都是单独的 因为它对应于 y 轴上的一个坐标 并且有几千个节点 所以我认为为每个节点使用子图是不合理的 使用简单的力定向布局编写了我自己的 Java2D PDFGrap
  • Graphviz - 如何使标签中的文本左对齐?

    我正在使用 graphviz 来可视化我正在解析的语言的 AST 我想包含源代码 作为标签 但 graphviz 对齐标签内的文本 这会扰乱我的缩进 并且代码对缩进敏感 这是问题的示例 第二行代码不应缩进 这是生成的 dot 文件的相关部分
  • 如何控制 graphviz 中的节点放置(即避免边缘交叉)

    我正在使用 graphviz 点 生成您可以在下面看到的图表 左下角的节点 红色椭圆 会引起烦恼 因为它的边缘与相邻节点的多个边缘交叉 有没有办法将节点放置限制在某个区域 您可以创建一个不可见的约束 以使红色节点出现在所有其他节点的左侧 r
  • 如何可视化 sklearn GradientBoostingClassifier?

    我训练过一个梯度提升分类器 http scikit learn org stable modules generated sklearn ensemble GradientBoostingClassifier html sklearn en
  • graphviz 绘图太宽

    我正在做练习 在 jupyter 笔记本中使用 graphviz 创建决策树 然而 决策树过于宽泛 这是代码 from sklearn tree import export graphviz export graphviz tree out
  • Graphviz中如何使边重叠?

    我想在 graphviz 中使边缘重叠 但 graphviz 似乎重新排列了叶节点以避免重叠 我可以强制 graphviz 停止重新排列节点吗 制作 Desired 我正在使用 pygraphviz 创建树 使用以下方法额外的隐形边缘非常适
  • GraphViz:未使用新安装程序设置 Windows PATH,从 R 调用时出现问题

    在 R 库中 我使用dot程序 来自 GraphViz 来生成一些图形 通常为 png 格式 dot是一个通常的可执行文件 我通过systemR 命令 到目前为止 一切都运行良好 因为 GraphViz 安装程序正在添加dot到 PATH
  • 将边权重传递给networkx中的graphviz_layout

    每个人都找不到如何将权重列表的属性名称传递给networkx中的graphviz layout 像这样的事情 nx spring layout G weight weight sum 但与nx graphviz layout G 也许有人会
  • 从节点内部开始一条边

    digraph foo a label
  • 在 GraphViz 中将多个短节点与单个高节点并行排列

    我想生成这样的东西 节点的对齐是重要的事情 而不是边缘的角度 V V lt alignment at top gt V gt lt alignment at

随机推荐

  • Expression.DebugInfo 如何标记表达式?

    所以我知道 Expression DebugInfo 的用途 并且创建了一个调试表达式 但如何使用此调试信息标记其他表达式 这是我正在尝试的一个非常基本的测试 using System using System Collections Ge
  • Python time.sleep() 与 event.wait()

    我想在我的多线程 Python 应用程序中定期执行一个操作 我见过两种不同的做法 exit False def thread func while not exit action time sleep DELAY or exit flag
  • ggplot 将标题的一部分斜体化并将文本分为两行

    我喜欢将以下标题添加到我的图表中 注 美国市场集中度平均值 王国和荷兰分别是1920年 1388年和1244年 其中 注 需要斜体 荷兰分别是1920年 1388年和1244年 应另起一行 使用paste函数 我无法将一部分斜体化 但使用
  • Eclipse 调试器不会在条件断点处停止

    我在 Eclipse 中有这段 Java 代码 我想对其进行调试 这是代码 public Double repulsion Node n1 Node n2 Double rep 0 0 rep Math pow K 2 distEuc n1
  • 使用 WinAPI 挂钩对程序进行沙箱处理

    我想对本机代码进行沙箱处理 并使用 WinAPI 和系统函数的挂钩来阻止或允许该程序执行某些操作 例如读 写文件 修改 Windows 注册表 使用 Internet 连接 这是一种良好且安全的方法吗 该程序绕过这样的安全层有多困难 我已经
  • StringReplace 的二进制版本

    我正在尝试在保存大量数据的 RawByteString 上运行 AnsiStrings StringReplace 其中一些数据需要替换 它会起作用 除了在 StringReplace 内部它将我的字符串转换为 PAnsiChar 因此搜索
  • 带有特定顺序和百分比注释的 ggplot2 饼图

    我有一个如下所示的数据框 make model cnt toyota camry 10 toyota corolla 4 honda city 8 honda accord 13 jeep compass 3 jeep wrangler 5
  • 事务可以在同一个 SQL Server 中跨多个数据库工作吗?如果是这样,这是分布式事务吗?

    事务可以在同一个 SQL Server 中跨多个数据库工作吗 如果是这样 这是分布式事务吗 或者会基本BEGIN TRANSACTION work 同一实例中跨多个DB的事务是本地事务 BEGIN TRANSACTION 会工作得很好
  • Java 8 Collectors.toMap SortedMap

    我正在使用 Java 8 lambda 并想使用Collectors toMap返回一个SortedMap 我能想到的最好的办法就是拨打以下电话Collectors toMap使用假人的方法mergeFunction and mapSupp
  • Javascript 将动态图像从 URL 绘制到画布元素上

    我正在尝试使用其 URL 将动态 PNG 图像 由 PHP 脚本生成的图像 绘制到 Canvas 元素上 我无法真正发布我正在测试的页面的确切 URL 因为您必须登录该网站 我正在使用的动态图像 URL 之一的示例是 http www we
  • 一个关于C++中类型强制的简单问题

    给定一个函数原型和一个类型定义 int my function unsigned short x typedef unsigned short blatherskite 标准定义了以下情况 int main int argc char ar
  • Heroku 上静态资产的重定向子域

    我希望 myapp com blog 重定向到 www myapp com blog 我已经安装了 Refraction 以在机架层执行子域重定向 这在 Heroku for blog 上不起作用 因为 blog 中的文件是静态资产 有什么
  • 简单分隔符之间的匹配,但分隔符本身不匹配

    我正在查看文本文件中的 JSON 数据 除了使用正则表达式来获取引号之间的值之外 我不想做任何事情 我只是用它作为帮助练习正则表达式的一种方法 并达到了这一点 看起来它应该很简单 但事实证明它不是 至少对我和办公室的其他一些人来说 我已经在
  • 用 Guice 代替抽象工厂?

    我是 Guice 的新手 我想知道我能走多远 我有一个界面UserInfo具有多个实现类GoogleUserInfo FacebookUserInfo TwitterUserInfo等等 这些类是使用工厂创建的 public class U
  • 使用 Python + Selenium 通过 while 循环点击下一页

    我正在尝试浏览名为 iens 的网站上的不同页面 我正在使用 selenium python 单击 volgende 荷兰语中的意思是 下一个 但我希望我的程序继续单击下一个 直到使用 while 循环没有剩余页面为止 所以在这种情况下 我
  • SQL Server MDF 文件 - 如何备份

    这是场景 我们有一个包含三个数据库的公司网站 它运行 SQL Server 2005 这三个数据库链接到 MDF 文件 有人试图直接复制 粘贴这些 MDF 文件之一 该文件对文件进行了某种锁定 从而导致只读错误 我们通过分离 重新连接来修复
  • PostgreSQL、pg_dump 和 pg_restore 以及对象依赖顺序

    我有个问题 有没有办法强制 PostgreSQL 9 3 备份 恢复模式以正确的依赖对象顺序 例如 在创建物化视图本身之前 我需要创建一个在物化视图中使用的函数 我在模式恢复时遇到错误 因为物化视图是在创建函数本身之前创建的 Thanks
  • pycharm 中的 matplotlib 外部文档

    如何在 pycharm 中添加 matplotlib 外部文档 到目前为止尝试添加 http matplotlib org api http matplotlib org api 模块 名称 api html matplotlib 模块 名
  • SignalR 和 IIS 回收

    我想创建一个使用 SignalR 向客户端发送通知的服务器 使用组 假设我的网站被回收 这些组会发生什么 因为它们不持久 您需要将您的组保存在外部永久存储中 在这里查找更多详细信息 http www asp net signalr over
  • Graphviz .dot 节点排序

    我正在构建一个 epsilon NFA 来使用规范结构识别正则表达式 我使用子图对正则表达式的各个部分进行分组 运算符给我带来了特别的麻烦 因为 dot 决定移动节点的顺序 我尝试添加边缘权重以强制特定边缘变短以保持边缘的顺序一致 但这似乎