Matplotlib绘制树形图
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绘制树形图相关推荐
- 【机器学习实战】python中使用Matplotlib绘制树形图
上一篇:决策树--构造决策树 文章目录 Matplotlib注解 使用文本注解绘制树节点 测试 构造注解树 获取叶节点的数目和树的层数 测试 plotTree 测试 Matplotlib注解 Matp ...
- 决策树使用matplotlib绘制树形图时判断节点x坐标计算方法
以下情况是在决策树大多是二叉树时画出来的树形比较好看一些. 注释: 1.cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree. ...
- 机器学习:使用Matplotlib注解绘制树形图以及实例运用
前言 内容承接上篇文章:决策树(Decision Tree)算法详解及python实现 这篇补充上篇没有说到的知识点以及运用. 一.增益率 采用与信息增益相同的表达式,增益率定义为: 其中: 称为属性 ...
- matPlotLib绘制决策树
上篇中,实现了创建决策树但并不直观,这里学习绘制决策树,便于直观理解. Matplotlib提供了名为pylab的模块,其中包括了许多numpy和pyplot中常用的函数,方便用户快速进行计算和绘图, ...
- 《机器学习实战》学习笔记:绘制树形图使用决策树预测隐形眼镜类型
上一节实现了决策树,但只是使用包含树结构信息的嵌套字典来实现,其表示形式较难理解,显然,绘制直观的二叉树图是十分必要的.Python没有提供自带的绘制树工具,需要自己编写函数,结合Matplotlib ...
- matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等
matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...
- 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点
使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点.最大最小距离点 1. 效果图 2. 源码 2.1 原始数据--xq.txt 2.2 源码 参考 这篇博客将演示如何 ...
- Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点
Matplotlib绘制象限图--支持中文.箭头.自定义轴线交点 1. 效果图 2. 原理 2.1 绘制象限图步骤 2.1 添加文字到图表 3. 源码 参考 这篇博客将介绍如何使用matplotlib ...
- python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图
在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...
最新文章
- 一行代码卖出 570 美元, 天价代码的内幕
- tf.name_scope() 和 tf.variable_scope() 的用法和玄机
- 服务器开发修改用户密码功能,更改服务器用户密码
- PHP 7.3 我们将迎来灵活的 heredoc 和 nowdoc 句法结构
- java例7_在Java 7中处理周数
- access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
- 一步步创建第一个Docker App —— 4. 部署应用
- openwabmail问题解决方法
- 矩阵连乘问题算法思想_AI自然语言处理算法岗常见面试题(一)
- 形式的化简与和式的展开
- node url模块
- python3爬虫 - cookie登录实战
- access视频教程百度网盘_Access数据库快速开发视频课程
- dh算法 理论依据_DH算法
- Python编程语言入门视频教程,人生苦短,我用Python!
- 数字转为汉语中人民币的大写
- 本Blog独立站点米豆网开通了
- 关键词提取——有监督方法
- 图像修复:专栏博文推荐查阅顺序
- 小米笔记本降价销售或预示其销售未如理想