Matplotlib绘制树形图

树信息存储为”字典“对象,

例如{‘no surfacing’: {0: ‘no’, 1: {‘flippers’: {0: ‘no’, 1: ‘yes’}}}}
绘制图形为:

#绘制树形图
import matplotlib.pyplot as pltdecision_node = dict(boxstyle="sawtooth",fc="0.8")
leaf_node = dict(boxstyle="round4",fc="0.8")
arrow_args = dict(arrowstyle="<-")
#获取树的叶子结点个数(确定图的宽度)
def get_leaf_num(tree):leaf_num = 0first_key = list(tree.keys())[0]next_dict = tree[first_key]for key in next_dict.keys():if type(next_dict[key]).__name__=="dict":leaf_num +=get_leaf_num(next_dict[key])else:leaf_num +=1return leaf_num
#获取数的深度(确定图的高度)
def get_tree_depth(tree):depth = 0first_key = list(tree.keys())[0]next_dict = tree[first_key]for key in next_dict.keys():if type(next_dict[key]).__name__ == "dict":thisdepth = 1+ get_tree_depth(next_dict[key])else:thisdepth = 1if thisdepth>depth: depth = thisdepthreturn depthdef plotNode(nodeTxt, centerPt, parentPt, nodeType):createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction',xytext=centerPt, textcoords='axes fraction',va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)#在父子节点间填充文本信息
def plotMidText(cntrPt, parentPt, txtString):xMid = (parentPt[0] - cntrPt[0]) / 2.0 + cntrPt[0]yMid = (parentPt[1] - cntrPt[1]) / 2.0 + cntrPt[1]createPlot.ax1.text(xMid, yMid, txtString, va="center", ha="center", rotation=30)def plotTree(myTree, parentPt, nodeTxt):numLeafs = get_leaf_num(myTree)depth = get_tree_depth(myTree)firstStr = list(myTree.keys())[0]cntrPt = (plotTree.xOff + (1.0 + float(numLeafs)) / 2.0 / plotTree.totalW, plotTree.yOff)plotMidText(cntrPt, parentPt, nodeTxt)plotNode(firstStr, cntrPt, parentPt, decision_node)secondDict = myTree[firstStr]plotTree.yOff = plotTree.yOff - 1.0 / plotTree.totalDfor key in secondDict.keys():if type(secondDict[key]).__name__ == 'dict':plotTree(secondDict[key], cntrPt, str(key))else:plotTree.xOff = plotTree.xOff + 1.0 / plotTree.totalWplotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leaf_node)plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))plotTree.yOff = plotTree.yOff + 1.0 / plotTree.totalDdef createPlot(inTree):fig = plt.figure(1, facecolor='white')fig.clf()axprops = dict(xticks=[], yticks=[])createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)plotTree.totalW = float(get_leaf_num(inTree))plotTree.totalD = float(get_tree_depth(inTree))plotTree.xOff = -0.5 / plotTree.totalWplotTree.yOff = 1.0plotTree(inTree, (0.5, 1.0), '')plt.show()

Matplotlib绘制树形图相关推荐

  1. 【机器学习实战】python中使用Matplotlib绘制树形图

    上一篇:决策树--构造决策树 文章目录 Matplotlib注解 使用文本注解绘制树节点 测试 构造注解树 获取叶节点的数目和树的层数 测试 plotTree 测试 Matplotlib注解 Matp ...

  2. 决策树使用matplotlib绘制树形图时判断节点x坐标计算方法

    以下情况是在决策树大多是二叉树时画出来的树形比较好看一些. 注释:  1.cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree. ...

  3. 机器学习:使用Matplotlib注解绘制树形图以及实例运用

    前言 内容承接上篇文章:决策树(Decision Tree)算法详解及python实现 这篇补充上篇没有说到的知识点以及运用. 一.增益率 采用与信息增益相同的表达式,增益率定义为: 其中: 称为属性 ...

  4. matPlotLib绘制决策树

    上篇中,实现了创建决策树但并不直观,这里学习绘制决策树,便于直观理解. Matplotlib提供了名为pylab的模块,其中包括了许多numpy和pyplot中常用的函数,方便用户快速进行计算和绘图, ...

  5. 《机器学习实战》学习笔记:绘制树形图使用决策树预测隐形眼镜类型

    上一节实现了决策树,但只是使用包含树结构信息的嵌套字典来实现,其表示形式较难理解,显然,绘制直观的二叉树图是十分必要的.Python没有提供自带的绘制树工具,需要自己编写函数,结合Matplotlib ...

  6. matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等

    matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...

  7. 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点

    使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点.最大最小距离点 1. 效果图 2. 源码 2.1 原始数据--xq.txt 2.2 源码 参考 这篇博客将演示如何 ...

  8. Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点

    Matplotlib绘制象限图--支持中文.箭头.自定义轴线交点 1. 效果图 2. 原理 2.1 绘制象限图步骤 2.1 添加文字到图表 3. 源码 参考 这篇博客将介绍如何使用matplotlib ...

  9. python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

最新文章

  1. 一行代码卖出 570 美元, 天价代码的内幕
  2. tf.name_scope() 和 tf.variable_scope() 的用法和玄机
  3. 服务器开发修改用户密码功能,更改服务器用户密码
  4. PHP 7.3 我们将迎来灵活的 heredoc 和 nowdoc 句法结构
  5. java例7_在Java 7中处理周数
  6. access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
  7. 一步步创建第一个Docker App —— 4. 部署应用
  8. openwabmail问题解决方法
  9. 矩阵连乘问题算法思想_AI自然语言处理算法岗常见面试题(一)
  10. 形式的化简与和式的展开
  11. node url模块
  12. python3爬虫 - cookie登录实战
  13. access视频教程百度网盘_Access数据库快速开发视频课程
  14. dh算法 理论依据_DH算法
  15. Python编程语言入门视频教程,人生苦短,我用Python!
  16. 数字转为汉语中人民币的大写
  17. 本Blog独立站点米豆网开通了
  18. 关键词提取——有监督方法
  19. 图像修复:专栏博文推荐查阅顺序
  20. 小米笔记本降价销售或预示其销售未如理想

热门文章

  1. 不知道手机视频剪辑app哪个好用?来试试这2个良心实用的软件
  2. 化算力为战力:宁夏中卫的数字化转型启示录
  3. Dedecms网站搬家
  4. 89元起!小米有品众筹便携式杀菌盒:开启无菌生活
  5. 朱仙镇木版年画集团第二批非遗动产“官瓷”
  6. 三星液晶拼接屏厂家有哪些 液晶拼接屏特点介绍
  7. linux 字节类型,int数据类型占几个字节?
  8. java实现a3打印_javase 打印杨辉三角
  9. 井字游戏HTML,纯CSS3实现的井字棋游戏
  10. 微信小程序 实现自动换行