pydot:是否可以绘制两个具有相同字符串的不同节点?

2024-01-18

我正在使用 pydot 在 python 中绘制图表。 我想表示一个决策树,比如(a1,a2,a3 是属性,两个类是 0 和 1:

       a1>3
      /    \
  a2>10    a3>-7
   /  \     /  \
  1    0   1    0

然而,使用 pydot,只创建了两个叶子,树看起来像这样(附有 png):

       a1>3
      /    \
  a2>10    a3>-7
      |  X  |
      1     0

现在,在这个简单的情况下,逻辑很好,但在较大的树中,属于不同分支的混乱内部节点是统一的。

我使用的简单代码是:

import pydot
graph = pydot.Dot(graph_type='graph')
edge = pydot.Edge("a_1>3", "a_2>10")
graph.add_edge(edge)
edge = pydot.Edge("a_1>3", "a_3>-7")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "0")
graph.add_edge(edge)
graph.write_png('simpleTree.png')

我还尝试创建不同的节点对象,而不是创建边并将其添加到图中,但 pydot 似乎检查节点池中是否有具有相同名称的节点,而不是创建一个新节点。

有任何想法吗?谢谢!


您的节点始终需要唯一的名称,否则您无法对它们进行唯一命名以在它们之间连接边。但是,您可以为每个节点指定一个标签,这是渲染时显示的内容。

因此,您需要添加具有唯一 ID 的节点:

graph = pydot.Dot(graph_type='graph')
graph.add_node(pydot.Node('literal_0_0', label='0'))
graph.add_node(pydot.Node('literal_0_1', label='0'))
graph.add_node(pydot.Node('literal_1_0', label='1'))
graph.add_node(pydot.Node('literal_1_1', label='1'))

然后添加连接这些节点的图边:

edge = pydot.Edge("a_2>10", "literal_0_0")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "literal_1_0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_0_1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_1_1")
graph.add_edge(edge)

与您定义的其余边一起,这使得:

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

pydot:是否可以绘制两个具有相同字符串的不同节点? 的相关文章

随机推荐

  • is 和 = 有什么区别?

    我已将这些语句输入到序言解释器中 但对结果感到困惑 他们不应该返回同样的东西吗 真的 1 7 5 2 false 2 7 is 5 2 true 没有为什么 2并不意味着assign在 Prolog 中 而是unify 统一算法根本不知道算
  • 使用 Spring Web 服务客户端解密消息

    第350章 赏金和华夫饼给可以帮助我的人 我一直在挣扎Spring http en wikipedia org wiki Spring FrameworkWeb 服务加密好几天了 我不知道如何让 Spring 对消息正文的加密起作用 每当我
  • F# 惰性像素读取

    我想将图像像素延迟加载到 3 维整数数组中 例如 以简单的方式 它看起来像这样 for i 0 to Width for j 0 to Height let point image GetPixel i j pixels 0 i j lt
  • 如何实现从左侧滑动的侧边菜单?

    我是 Flutter 新手 刚刚完成入门教程 我想创建一个侧边菜单 当您滑动时它会从左侧出现 就像 Android 上的 Gmail 不幸的是 我在文档中找不到这样的布局 并且 flutter gallery 中的示例有点混乱 有人可以解释
  • 使用 C++ 将曲线重新采样为均匀长度的段

    使用 C 将曲线重新采样为均匀长度段的最佳方法是什么 我拥有的是代表二维曲线的一组点 在下面的示例中 我有一个带有 x 和 y 分量的点结构以及带有测试位置的点向量 每对点代表曲线上的一段 重采样曲线示例如下图所示 红色圆圈是原始位置 绿色
  • 递增并检查 XSLT 中的计数器变量

    我在分配计数器变量并递增它然后检查 XSLT 中的某个值方面没有什么困难 这是我的代码
  • 如何取消订阅应用程序的所有 Facebook 页面 Webhook

    我有一个 Facebook 应用程序 订阅了 20 000 多个页面 服务器无法处理来自所有这些 Facebook 页面的挂钩 我想从所有这些 Facebook 页面取消订阅我的应用程序 有没有更快的方法来做到这一点 我拥有的大部分页面访问
  • 从演示应用程序内部获取 Android 库模块版本号

    我可以通过编程方式获取我的应用程序的版本名称 例如this https stackoverflow com a 21119027 3681880 String versionName BuildConfig VERSION NAME 1 0
  • 将 MySQL 中的列从 int 更改为 double?

    基本上 我目前在MySQL表中有一个列 它是一个int 我想把它改成双倍 我在网上搜索过 但它提出的只是从列中获取值时进行转换 例如将某些日期转换为日期 但这不是我的意思 我猜这是 Alter Table 的问题 我在 MySQL 开发页面
  • RequestDispatcher.forward() 到“/WEB-INF”下的资源在 WebSphere 中不起作用

    在我的一个 servlet 中 我调用RequestDispatcher forward 调用 WEB INF 文件夹下某处的静态资源 request getRequestDispatcher WEB INF some path image
  • Twitter 的 Java/Grails 库:JTwitter、Twitter4J 或 Grails 插件?

    我正在寻求将一个新应用程序 将要构建 可能在 Grails 中 与 Twitter 集成 并发现 至少 有 3 个库可供使用 JTwitter http www winterwell com software jtwitter php 推特
  • C++根据条件初始化变量[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我目前正在尝试弄清楚如何根据条件初始化变量 这是我要修改的当前代码 int dimsOut 4 dimsOut 0 data gt nDat
  • 重写 ASP.NET MVC 3 RC 中的默认 EditorFor 模板选择

    我正在创建一个 MVC 应用程序 当前使用 EditorFor 生成大量视图 整个视图基本上只是一个 EditorForModel 而且效果很好 然而 我遇到了一个小问题 我似乎找不到解决方案 重要的是它按照我需要的方式工作 那就是在尝试渲
  • 在本机库中调试崩溃的最简单方法,由 Android 应用程序链接?

    我已将几个低级 C 库移植并创建到 Android 以便在我的应用程序中使用 我使用 NDK 交叉编译它们 然后使用 System loadLibrary 链接到它们 一段时间后 我的应用程序崩溃了 似乎是由于库中的错误 07 28 11
  • Swift:使用枚举在 CoreData 中存储状态

    我想在 CoreData 中存储托管对象的枚举状态 enum ObjStatus Int16 case State1 0 case State2 1 case State3 3 class StateFullManagedObject NS
  • Angular2 在 Component.js 中使用管道

    我正在学习 Angular2 我想格式化一个添加千位逗号分隔符的数字 据我所知 这可以使用 Pipes 来完成 问题是我想在 js 文件中以编程方式格式化数字 而不是在 html 中 就像 var number 一样 首先 我意识到没有可以
  • 如何将数据从活动传递到自定义适配器

    大家好 我需要将 arraylist 从活动传递到自定义适配器类 但使用我的代码它没有通过 我不知道为什么 我使用意图来传递数据 活动 private void azz int a 0 String status boolean statu
  • 排除 HttpModule 在 IIS7 上运行静态内容

    我的身份验证 HttpModule 有问题 问题是它显然会针对我在 Web 服务器 IIS7 上收到的每个请求运行 因为它也使用 Session 变量 所以它无法在 CSS JS 文件和类似文件上正常工作 我尝试使用
  • DispatchSemaphore 是 NSLock 的良好替代品吗?

    我一直在使用NSLock同步代码的敏感部分 但由于必须从锁定它们的同一线程中解锁它们而遇到了问题 然后我发现GCDDispatchSemaphores 似乎做同样的事情 并且可以从任何线程向它们发出信号 这增加了便利性 不过 我想知道这种便
  • pydot:是否可以绘制两个具有相同字符串的不同节点?

    我正在使用 pydot 在 python 中绘制图表 我想表示一个决策树 比如 a1 a2 a3 是属性 两个类是 0 和 1 a1 gt 3 a2 gt 10 a3 gt 7 1 0 1 0 然而 使用 pydot 只创建了两个叶子 树看