使用 pydot 绘制决策树

2024-01-18

我已经训练了一个决定tree(Python字典)如下。现在我尝试使用它来绘制它pydot http://code.google.com/p/pydot/。在定义树(pydot 图)的每个节点时,我为其指定一个唯一(且详细)的名称和一个简短的标签。

我的问题是,在我通过写入 .png 得到的结果图中,我看到了详细的内容node names而不是node labels.

我已经关注了 @Martijn Pieters 的回答here https://stackoverflow.com/questions/13012621/pydot-is-it-possible-to-plot-two-different-nodes-with-the-same-string-in-them。我不知道我错过了什么,有什么想法吗?

import pydot

tree= {'salary': {'41k-45k': 'junior', '46k-50k': {'department': {'marketing': 'senior', 'sales': 'senior', 'systems': 'junior'}}, '36k-40k': 'senior', '26k-30k': 'junior', '31k-35k': 'junior', '66k-70k': 'senior'}}

def walk_dictionaryv2(graph, dictionary, parent_node=None):
    '''
    Recursive plotting function for the decision tree stored as a dictionary
    '''

    for k in dictionary.keys():

        if parent_node is not None:

            from_name = parent_node.get_name().replace("\"", "") + '_' + str(k)
            from_label = str(k)

            node_from = pydot.Node(from_name, label=from_label)

            graph.add_edge( pydot.Edge(parent_node, node_from) )

            if isinstance(dictionary[k], dict): # if interim node


                walk_dictionaryv2(graph, dictionary[k], node_from)

            else: # if leaf node
                to_name = str(k) + '_' + str(dictionary[k]) # unique name
                to_label = str(dictionary[k])

                node_to = pydot.Node(to_name, label=to_label, shape='box')
                graph.add_edge(pydot.Edge(node_from, node_to))

                #node_from.set_name(to_name)

        else:

            from_name =  str(k)
            from_label = str(k)

            node_from = pydot.Node(from_name, label=from_label)
            walk_dictionaryv2(graph, dictionary[k], node_from)


def plot_tree(tree, name):

    # first you create a new graph, you do that with pydot.Dot()
    graph = pydot.Dot(graph_type='graph')

    walk_dictionaryv2(graph, tree)

    graph.write_png(name+'.png')


plot_tree(tree,'name')

这是我通过上面的代码得到的(不需要的)输出:


您需要将您创建的节点显式添加到图中:

node_from = pydot.Node(from_name, label=from_label)
graph.add_node(node_from)

and

node_to = pydot.Node(to_name, label=to_label, shape='box')
graph.add_node(node_to)

否则渲染器将看不到名称。graph.add_node()将节点元数据包含在生成的.dot file.

和那些graph.add_node()添加行,结果是:

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

使用 pydot 绘制决策树 的相关文章

  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • 在Python中如何获取字典的部分视图?

    是否有可能获得部分视图dict在Python中类似于pandasdf tail df head 说你有很长一段时间dict 而您只想检查某些元素 开头 结尾等 dict 就像是 dict head 3 To see the first 3
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • PyTorch 给出 cuda 运行时错误

    我对我的代码做了一些小小的修改 以便它不使用 DataParallel and DistributedDataParallel 代码如下 import argparse import os import shutil import time
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • 带有 RotatingFileHandler 的 Python 3 记录器超出 maxBytes 限制

    我使用以下代码来限制日志文件的大小 最小示例 import logging from logging handlers import RotatingFileHandler Set up logfile and message loggin
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 更改文本链接颜色 swiftUI

    我有以下内容Text 需要 Markdown 来显示链接 Text init Link Example https www google es 有没有办法更改链接的默认颜色集 可以使用强调色 例如 Text init Link Exampl
  • V8 中的栈和堆(JavaScript)

    V8 是否像 JVM 一样使用栈和堆 如果是这样 它会将原语放在堆栈上并将对象放在堆上吗 In V8 null undefined true and false内部是堆分配的对象 https github com v8 v8 blob c7
  • 为什么 NSData dataWithContentsOfURL 有时返回 NULL 值?

    我非常感谢这篇文章将 NSData 字节转换为 NSString https stackoverflow com questions 550405 convert nsdata bytes to nsstring 特别是对于 christo
  • Python 帮助:从 csv 文件创建 {str:list of str} 的字典

    我必须创建一个以下格式的表 str list of str 使用以下代码打开 csv 文件 我得到 import csv cr csv reader open name csv r for row in cr print row outpu
  • 如何从 PHP 发送带有标头的 GET 请求?

    如果这是一个重复的问题 请告诉我 但这开始变得荒谬了 我想用 PHP GET http www example com hello xyz 并将此标头添加到请求中 X Header Name foobar 其中 foobar 来自已定义的
  • 在java中将字符串转换为整数的最有效方法

    将 String 对象转换为 Integer 对象的方法有很多种 以下哪一个是最有效的 Integer valueOf Integer parseInt org apache commons beanutils converters Int
  • 删除 PDF 输出中条形周围的空格

    我有一个条形图 gt data c 1 5 3 4 gt barplot data space 0 col gray border 0 在 OS X 上 使用默认驱动程序 Quartz 如下所示 注意如何有no条之间的空间 但是 将图形导出
  • CBPeripheral 存储的 UUID 对于重新连接有效多长时间? [复制]

    这个问题在这里已经有答案了 我一直在使用 Corebluetooth 并且了解到 除了每次想要连接时都要经历扫描外围设备的繁琐过程之外 我还可以存储外围设备的 UUID 并将其与retrievePeripheralsWithIdentifi
  • python中多个数组的相加

    我有许多数组 我希望使用加法将它们广播到单个数组中 我知道可以简单地这样做 a numpy array 1 2 3 b numpy array9 4 5 6 sum a b print sum 5 7 9 但是 我无法像这个简单的示例一样对
  • HashMap get/put 复杂性

    我们习惯说HashMap get put操作是 O 1 然而 这取决于哈希实现 默认的对象哈希实际上是 JVM 堆中的内部地址 我们确信这样的说法就足够好了吗 get put是 O 1 可用内存是另一个问题 据我从 javadocs 了解到
  • 请求中添加请求参数

    我需要在一个kernel event listener在阶段kernel controller为了做某事kernel response 听众 我考虑过添加一个参数 request对象 但是没有找到任何方法或这个 http api symfo
  • Node.js:如何附加到正在运行的进程并使用控制台调试服务器?

    我使用 永远 来运行我的应用程序 我想附加到运行环境来检查我的应用程序 那我能做什么呢 From http nodejs org api debugger html http nodejs org api debugger html 高级用
  • 我可以在会话之外或创建会话之间进行挂钩/回调吗?

    With train and evaluate 可以执行一个计划 根据我传递的规范来训练和评估模型 我可以注册一些钩子EvalSpec https www tensorflow org api docs python tf estimato
  • numpy.genfromtxt 导入元组而不是数组

    我正在尝试学习 Python 和 Numpy 所以请耐心等待 我正在使用 numpy genfromtxt 将 CSV 文件导入到矩阵中 CSV 如下所示 Time min Nm Speed Power Distance Rpm Bpm i
  • Azure Cosmo DB 是否对 45MB 数据库多收费?

    我们使用的 Cosmos DB 是 MongoDB 我们的数据库大小只有 45 MB 所有集合中的文档少于 10 000 个 我们每天运行少量查询和写入 每天少于 3000 个请求 而且我们每晚运行 MongoDB Dump 将整个数据库转
  • VBScript 或 VBA 中的 ISO 周数

    我怎样才能得到ISO 周数 http wikipedia org wiki ISO week dateVBScript 或 VBA 中的某个日期 首先 请注意 报告一周很重要year以及周数 因为日期的年份可能不同 多个 Windows 组
  • iOS 7 中的 UITextView 链接检测

    我有一个UITextView这是通过 Interface Builder 进行管理的 作为数据检测 我检查了 链接 在 iOS 6 中 一切工作正常 链接突出显示并且可以单击 但在 iOS 7 中 所有链接仍然只是纯文本 可编辑和可选择的复
  • 在正则表达式中查找模式的第二次出现

    我的输入是 String t1 test1 testVar varName ns2 test String t2 test2 testVar varName ns2 test defValue String patternString s
  • Ruby 相当于 Python 的 help() 吗?

    当使用交互式 Python 时 我倾向于依赖内置的help 函数告诉我期望和 或返回什么 并打印出任何可能对我有帮助的文档 Ruby 是否有与此功能等效的函数 我正在寻找可以在 irb 中使用的东西 例如 在交互式 Python 中我可以输
  • 使用 pydot 绘制决策树

    我已经训练了一个决定tree Python字典 如下 现在我尝试使用它来绘制它pydot http code google com p pydot 在定义树 pydot 图 的每个节点时 我为其指定一个唯一 且详细 的名称和一个简短的标签