Python绘制带标记和箭头的树结构

本文要点在于Python扩展库matplotlib的text()方法与annotate()的使用。

import matplotlib.pyplot as plt

plt.figure(1, figsize=(8,8))

ax = plt.subplot(111)

def drawNode(text, startX, startY, endX, endY, ann):

#绘制带箭头的文本

ax.annotate(text,

xy=(startX+0.01, startY), xycoords='data',

xytext=(endX, endY), textcoords='data',

arrowprops=dict(arrowstyle="<-",

connectionstyle="arc3"),

bbox=dict(boxstyle="square", fc="r")

)

#在箭头中间位置标记数字

ax.text((startX+endX)/2, (startY+endY)/2, str(ann))

#绘制树根

bbox_props = dict(boxstyle="square,pad=0.3", fc="cyan", ec="b", lw=2)

ax.text(0.5, 0.97, 'A', bbox=bbox_props)

#绘制其他节点

drawNode('B', 0.5, 0.97, 0.3, 0.8, 0)

drawNode('C', 0.5, 0.97, 0.7, 0.8, 1)

drawNode('D', 0.3, 0.8, 0.2, 0.6, 0)

drawNode('E', 0.3, 0.8, 0.4, 0.6, 1)

drawNode('F', 0.7, 0.8, 0.6, 0.6, 0)

drawNode('G', 0.7, 0.8, 0.8, 0.6, 1)

drawNode('H', 0.2, 0.6, 0.1, 0.4, 0)

drawNode('I', 0.4, 0.6, 0.3, 0.4, 0)

drawNode('J', 0.4, 0.6, 0.5, 0.4, 1)

drawNode('K', 0.6, 0.6, 0.7, 0.4, 1)

#显示图形

plt.show()

运行效果图:

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏对角另一面

用vue实现模态框组件

基本上每个项目都需要用到模态框组件,由于在最近的项目中,alert组件和confirm是两套完全不一样的设计,所以我将他们分成了两个组件,本文主要讨论的是con...

5210
来自专栏非典型技术宅

iOS之分段控制器UISegmentedControl1. 分段控制器(UISegmentedControl)2. 事件监听3. 手势事件大全

1122
来自专栏项勇

笔记47 | Android性能优化之使用include标签重用layouts(二)

1424
来自专栏Nian糕的私人厨房

CSS 鼠标悬停图片,显示隐藏文本

我在 JavaScript 鼠标悬停图片,显示隐藏文本 这篇博文当中实现了同样的效果,只不过是通过 JS 来实现的,但其实,通过 CSS 动画也能实现同样的效果...

1294
来自专栏非典型技术宅

断言和分段控制器1. 断言(Assertions)2. 分段控制器(UISegmentedControl)

923
来自专栏Android干货

安卓开发之ScrollView

2806
来自专栏前端知识分享

第121天:移动端开发基本知识

注意lang=“zh-CN”表示网页为中文,如果是英文则为lang=“en-CN”。

1214
来自专栏Django Scrapy

HTML表格不变形的方法;颜色代号

在<table>< td ><tr>标签加style 相关链接在这里 如何保证table表格不被撑开(固定HTML表格宽度) 我们在网站制作过程中,有时会...

5357
来自专栏一“技”之长

Bootstrap响应式前端框架笔记九——输入框组

    将input标签与input-group-addon类组合使用可以为输入框添加前后挂件,需要注意,Bootstrap不支持在输入框控件一侧添加多个挂件,...

881
来自专栏程序员的诗和远方

Canvas画图-鼠标移动图形

之前那篇Canvas画图-鼠标涂鸦已经可以实现与Canvas的简单交互,这篇会介绍Canvas中实现交互性的一个重要方法isPointInPath。 基本...

3525

扫码关注云+社区

领取腾讯云代金券