深度入门学习"/>
深度入门学习
使用文本注解绘制树结点
import matplotlib.pyplot as plt# 定义文本框和箭头格式
decisionNode = dict(boxstyle="sawtooth", fc="0.8") # dict()用于创建一个字典, boxstyle="sawtooth"表示注解框的边缘是波浪线,fc=”0.8” 是颜色深度
leafNode = dict(boxstyle="round4", fc="0.8") #round4表示圆形
arrow_args = dict(arrowstyle="<-") # 设置箭头的样式def plotNode(nodeTxt, centerPt, parentPt, nodeType): # 绘制带箭头的注解,centerPt为节点中心坐标,parentPt 为起点坐标createPlot.axl.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction', xytext=centerPt, textcoords='axes fraction',va="center", ha="center", bbox=nodeType, arrowprops=arrow_args) #xytext处的文本标注提供坐标(xycoords)中的xy处的点def createPlot():fig = plt.figure(1, facecolor='white') # 设置背景色fig.clf() # 清空画布createPlot.axl = plt.subplot(111, frameon=False) # 表示图中有1行1列,绘图放在第几列, 有无边框, subplot(111)和subplot(1,1,1)是相同的plotNode('a decision node', (0.5, 0.1), (0.1, 0.5), decisionNode) # 第一个坐标是注解的坐标 第二个坐标是点的坐标 plotNode('a leaf node', (0.8, 0.1), (0.3, 0.8), leafNode)plt.show()createPlot()
输出:
def getNumLeafs(myTree):numLeafs = 0#firstKey = tree.keys()[0] 书上的代码有点小错误,因为python里的字典是不支持索引的#如果运行,会报错'dict_keys' object does not support indexing,下面加以改正:for key in myTree.keys():firstStr = key #获取当前树myTree中第一个key,即该树的根节点secondDict = myTree[firstStr] #获取第一个key对应的内容,即根节点下的子树for key in secondDict.keys(): #根节点对应的各个分支,依次循环if type(secondDict[key]).__name__ == 'dict': #如果该子树还是一棵树,递归调用函数getNumLeafs(),获取子树的叶子结点数numLeafs += getNumLeafs(secondDict[key])else: #如果是叶子结点,则叶子数加1numLeafs += 1return numLeafs #返回当前树中叶子结点的个数
def getTreeDepth(myTree):maxDepth = 0 #用来记录最高子树的高度+1# firstKey = tree.keys()[0] 书上的代码有点小错误,因为python里的字典是不支持索引的,# 如果运行,会报错'dict_keys' object does not support indexing,下面加以改正:for key in myTree.keys():firstStr = key #获取树的根节点secondDict = myTree[firstStr] #获取树的子树for key in secondDict.keys(): #根节点对应的各个分支,依次循环#如果该子树还是一棵树,递归调用函数getTreeDepth(),获取子树的深度if type(secondDict[key]).__name__ == 'dict':thisDepth = 1 + getTreeDepth(secondDict[key])else: #如果是叶子结点,则返回1thisDepth = 1if thisDepth > maxDepth: #更新最大深度变量值maxDepth = thisDepthreturn maxDepth #返回最大深度
绘制树参考
更多推荐
深度入门学习
发布评论