登录/注册

树状图怎么画

更多

树状图绘制指南

在Python中,树状图可以使用networkxmatplotlib库绘制。下面我将展示一个完整的树状图绘制解决方案,包含中文标签和层次化布局。

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()

代码说明

这个树状图绘制代码包含以下关键部分:

  1. 中文支持

    • 使用plt.rcParams设置中文字体(SimHei)
    • 禁用unicode负号显示以解决兼容性问题
  2. 树结构定义

    • 使用networkx.DiGraph()创建有向图
    • 添加节点(节点ID和中文标签)
    • 添加边定义节点间关系
  3. 自定义层级布局

    • hierarchy_pos函数实现树状布局算法
    • 根节点在顶部,子节点均匀分布在下方
  4. 可视化元素

    • 节点使用天蓝色圆形表示
    • 箭头表示层级关系方向
    • 中文标签清晰显示
    • 添加标题和说明文字
  5. 美化设置

    • 适当大小和间距
    • 禁用坐标轴显示
    • 添加网格背景

这段代码可以直接运行,生成一个美观的公司组织结构树状图。您可以根据需要修改节点和边的定义来创建自己的树状结构。

如何自定义树状图

  1. 修改节点

    • nodes列表中添加/删除元组,格式为(节点ID, 显示文本)
  2. 修改关系

    • edges列表中添加/删除连接关系,格式为(上级节点ID, 下级节点ID)
  3. 样式调整

    • 修改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

基于Arduino系统拉线墙机器人设计制作

基于Arduino系统拉线墙画机器人设计及制作资料分享。

资料下载 王优秀哈哈哈哈哈 2022-05-05 17:32:11

如何双层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

如何轻松实现用VisioUML类

对于画类图的工具很多,曾经学过用starUML画类图,但这个是用于Jav

资料下载 罗星 2019-07-18 17:38:00

如何时序时序的工具有哪些?

轻松绘制各种时序图,同时支持快捷键操作功能,操作简单便捷。TimeGen还可以自由设置各个文本框的属性字体样式、字体大小和颜色、可以标注信号之间的关系,调整信号周期的宽度,还能设置信号的背景图案。如下图1是小编自己画

2023-08-04 10:42:15

使用MATLABBode的方法

开门见山:使用MATLAB画Bode图有好几种方法,本文主要介绍一下我自己经常使用的一种方法,即:脚本m文件方法。首先,要在Matlab的首页创建一个新的脚本m文件,即:新建脚本。其次,明确所要

2023-02-25 13:42:53

电路

画电路图:教材上的电路图是用什么软件画的,

2022-03-24 16:07:36

C语言基础知识的树状结构是如何组成的

该图是关于C语言基础知识的树状结构图,也许里面有些地方看起来不够主流,但是可能更合理。以后将会对该图的所有细节知识点以通俗易懂的方式逐个梳理,敬

2021-11-08 07:39:31

一文详解什么是树状数组

树状数组,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

这个电路能用multisim仿真吗?波特

这是个锁相环中滤波器,原图是PSPICE仿真图,怎么用multisim仿真画波特图呢???波特

2019-05-28 20:05:11
7天热门专题 换一换
相关标签