You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NetworkX组织图中添加职位、照片并修改节点形状

构建带职位与照片的方形节点组织架构图

我正尝试构建组织架构图,需在图表中添加多类信息并插入员工照片,当前实现代码如下:

import sqlite3, pandas as pd, networkx as nx

con = sqlite3.connect('people.db')

qry="""
SELECT a1.id, a1.name as a1, a2.name as a2, a1.position as a3
FROM people a1
INNER JOIN people a2 ON a1.manager_id = a2.id
"""

emps=pd.read_sql(qry, con)

emps.rename(
columns={'a2' :'manager', 'a1' :'person', 'a3':'position'},
inplace=True
)

edgelist=emps[['person', 'manager',]]

print(edgelist)

orgchart=nx.from_pandas_edgelist(edgelist, source='manager', target='person')

p=nx.drawing.nx_pydot.to_pydot(orgchart)
p.write_png('orgchart.png')

需求:

  • 每个节点显示姓名,下方添加职位与照片
  • 将节点从圆形改为方形

解决方案

要实现这些效果,需要在networkx转pydot的过程中为节点添加自定义属性,包括形状、复合标签和图片路径。以下是修改后的完整实现:

1. 扩展数据查询与准备

首先修改SQL查询,获取员工的照片路径(假设people表包含photo_path字段),然后通过遍历数据为每个节点设置属性。

2. 修改后的完整代码

import sqlite3
import pandas as pd
import networkx as nx

con = sqlite3.connect('people.db')

# 扩展查询,取出姓名、经理、职位和照片路径
qry = """
SELECT a1.name as person, a2.name as manager, a1.position as position, a1.photo_path as photo
FROM people a1
INNER JOIN people a2 ON a1.manager_id = a2.id
"""

emps = pd.read_sql(qry, con)
con.close()

# 构建边列表并创建networkx图
edgelist = emps[['person', 'manager']]
orgchart = nx.from_pandas_edgelist(edgelist, source='manager', target='person')

# 转为pydot对象并配置节点属性
p = nx.drawing.nx_pydot.to_pydot(orgchart)

for _, row in emps.iterrows():
    node = p.get_node(row['person'])[0]
    # 设置节点为方形
    node.set_shape("square")
    # 使用HTML表格实现姓名+职位的多行显示
    node.set_label(f'<<TABLE BORDER="0"><TR><TD>{row["person"]}</TD></TR><TR><TD><FONT POINT-SIZE="10">{row["position"]}</FONT></TD></TR></TABLE>>')
    # 嵌入员工照片,确保路径正确
    node.set_image(row['photo'])
    # 可选:调整节点尺寸适配照片
    node.set_height("2.0")
    node.set_width("2.0")

# 保存最终架构图
p.write_png('orgchart_with_details.png')

关键说明

  • 方形节点:通过node.set_shape("square")直接修改节点形状。
  • 多行标签:利用Graphviz的HTML表格语法,实现姓名和职位的分行展示,通过FONT POINT-SIZE调整职位文字的大小,让层级更清晰。
  • 嵌入照片:node.set_image()指定照片的本地路径,需确保图片格式为Graphviz支持的PNG/JPG,且路径正确(绝对路径或相对路径均可)。
  • 环境依赖:需确保已安装graphviz库(pip install graphviz),同时系统需安装Graphviz二进制程序(可通过官网下载或包管理器安装),否则无法渲染图片和自定义形状。

内容的提问来源于stack exchange,提问作者Pedro H C Miguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:55:20