树状图怎么画
树状图绘制指南
在Python中,树状图可以使用networkx和matplotlib库绘制。下面我将展示一个完整的树状图绘制解决方案,包含中文标签和层次化布局。
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 创建一个有向图表示树结构
G = nx.DiGraph()
# 添加节点(示例:公司组织结构)
nodes = [
("CEO", "首席执行官"),
("CTO", "技术总监"),
("CFO", "财务总监"),
("HRD", "人力资源总监"),
("Dev", "开发团队"),
("QA", "质量保证团队"),
("Acct", "会计部门"),
("Rec", "招聘团队")
]
# 添加边(节点间关系)
edges = [
("CEO", "CTO"),
("CEO", "CFO"),
("CEO", "HRD"),
("CTO", "Dev"),
("CTO", "QA"),
("CFO", "Acct"),
("HRD", "Rec")
]
# 添加节点和边到图中
for node in nodes:
G.add_node(node[0], label=node[1])
G.add_edges_from(edges)
# 定义层级布局
def hierarchy_pos(G, root, width=1., vert_gap=0.2, vert_loc=0, xcenter=0.5):
pos = {}
def h_recur(G, root, width=1., vert_gap=0.2, vert_loc=0, xcenter=0.5,
pos=None, parent=None, parsed=[]):
if root not in parsed:
parsed.append(root)
neighbors = list(G.successors(root))
if len(neighbors) != 0:
dx = width / len(neighbors)
nextx = xcenter - width/2 - dx/2
for neighbor in neighbors:
nextx += dx
pos = h_recur(G, neighbor, width=dx, vert_gap=vert_gap,
vert_loc=vert_loc-vert_gap, xcenter=nextx,
pos=pos, parent=root, parsed=parsed)
pos[neighbor] = (nextx, vert_loc)
if parent is not None:
pos[root] = (xcenter, vert_loc)
else:
pos[root] = (xcenter, vert_loc)
return pos
return h_recur(G, root, width, vert_gap, vert_loc, xcenter, pos={},
parent=None, parsed=[])
# 使用自定义布局
pos = hierarchy_pos(G, "CEO")
# 创建图形
plt.figure(figsize=(12, 8))
# 绘制节点
node_labels = nx.get_node_attributes(G, 'label')
nx.draw_networkx_nodes(G, pos, node_size=3000, node_color='skyblue', alpha=0.9)
nx.draw_networkx_edges(G, pos, width=2, edge_color='gray', arrows=True,
arrowstyle='-|>', arrowsize=20)
# 绘制中文标签
nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=12,
font_family='SimHei')
# 添加标题和说明
plt.title("公司组织结构树状图", fontsize=16, pad=20)
plt.figtext(0.5, 0.01,
"树状图展示层级关系:节点大小表示重要性,箭头表示从属关系",
ha="center", fontsize=12, style='italic')
# 添加网格和美化
plt.grid(False)
plt.axis('off')
# 调整布局
plt.tight_layout()
plt.subplots_adjust(bottom=0.15)
# 显示图形
plt.show()
代码说明
这个树状图绘制代码包含以下关键部分:
-
中文支持:
- 使用
plt.rcParams设置中文字体(SimHei) - 禁用unicode负号显示以解决兼容性问题
- 使用
-
树结构定义:
- 使用
networkx.DiGraph()创建有向图 - 添加节点(节点ID和中文标签)
- 添加边定义节点间关系
- 使用
-
自定义层级布局:
hierarchy_pos函数实现树状布局算法- 根节点在顶部,子节点均匀分布在下方
-
可视化元素:
- 节点使用天蓝色圆形表示
- 箭头表示层级关系方向
- 中文标签清晰显示
- 添加标题和说明文字
-
美化设置:
- 适当大小和间距
- 禁用坐标轴显示
- 添加网格背景
这段代码可以直接运行,生成一个美观的公司组织结构树状图。您可以根据需要修改节点和边的定义来创建自己的树状结构。
如何自定义树状图
-
修改节点:
- 在
nodes列表中添加/删除元组,格式为(节点ID, 显示文本)
- 在
-
修改关系:
- 在
edges列表中添加/删除连接关系,格式为(上级节点ID, 下级节点ID)
- 在
-
样式调整:
- 修改
node_size调整节点大小 - 修改
node_color改变节点颜色 - 调整
figsize参数改变图像尺寸 - 修改
font_size调整文字大小
- 修改
希望这个示例能帮助您创建所需的树状图!
不知道怎么画原理图了
某天,某实验室,几位工程师在讨论《原理图设计规范》。一秒之前还很和谐,下一秒讨论原理图怎么画的时候,大家的意见就分歧很大了。类似于“豆浆是喝甜的
2025-04-30 18:40:43
KT6368A的封装怎么画 原理图怎么画 资料怎么看 怎么下载呢
KT6368A的封装怎么画 原理图怎么画 资料怎么看 怎么下载呢 也有好几个客户问我们这样的问题,实在是太难了 但是没办法,客户就是上帝,也
2023-10-19 12:22:46
秒画秒画,画我心意
科技绘梦,心想画成! 商汤日日新大模型旗下图像生成平台“秒画SenseMirage”,帮你开启AI作画之旅。 商汤秒画具备 提示词(Prompt)补全功能 ,结合用户输入少量提示词,即可利用产品
2023-09-14 22:30:01
如何画双层pcb板_PCB双层板的布线原则资料下载
电子发烧友网为你提供如何画双层pcb板_PCB双层板的布线原则资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
刘满贵
2021-04-26 08:45:16
基于树状结构Parzen估计方法的超参数优化方法
亿测序片段聚类提供了一种可扩展的解决方案。但是, Sparc算法参数的设置是一项非常具有挑战性的工作。 Sparc算法拥有许多对算法性能有着很大影响的超参数,选择合适的超参数集对于充分发挥 Sparc算法的性能来说是至关重要的。为了提高 Sparc算法的性能,探索了一种基于树状结构 Pa
资料下载
佚名
2021-04-13 14:42:42
画PCB过程中注意细节的要领资料下载
电子发烧友网为你提供画PCB过程中注意细节的要领资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
李娟
2021-04-02 08:42:23
如何画时序图?画时序图的工具有哪些?
轻松绘制各种时序图,同时支持快捷键操作功能,操作简单便捷。TimeGen还可以自由设置各个文本框的属性字体样式、字体大小和颜色、可以标注信号之间的关系,调整信号周期的宽度,还能设置信号的背景图案。如下图1是小编自己画
2023-08-04 10:42:15
使用MATLAB画Bode图的方法
开门见山:使用MATLAB画Bode图有好几种方法,本文主要介绍一下我自己经常使用的一种方法,即:脚本m文件方法。首先,要在Matlab的首页创建一个新的脚本m文件,即:新建脚本。其次,明确所要
2023-02-25 13:42:53
C语言基础知识的树状结构是如何组成的
该图是关于C语言基础知识的树状结构图,也许里面有些地方看起来不够主流,但是可能更合理。以后将会对该图的所有细节知识点以通俗易懂的方式逐个梳理,敬
一文详解什么是树状数组
树状数组,Binary Indexed Tree(简称BIT),是由Peter M. Fenwick在1994年发明的名字十分高大上,那么它是干什么的呢?
2021-06-11 10:03:01
PCB画原理图的十大注意事项解析
有的元件在库里找不到是要自己画的,其实实际中还是自己画好,最后有一个自己的库,那才叫方便呢。画的过程是启动FILE/NEW——》选择SCH LIB——》这就进入了零件编辑库——》
2019-08-20 15:04:36
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机