用pygraphviz这个模块可视化


效果图
在这里插入图片描述

用pygraphviz这个模块可视化

分析世界百强IT企业的组织管理结构和用人单位内的职位升迁关系示意图,用pygraphviz这个模块可视化。

步骤

导入模块

import pygraphviz as pgv  

创建图形

G = pgv.AGraph(directed=True, strict=False, 
nodesep=0, ranksep=1.2, rankdir="TB", splines="none", 
concentrate=True, bgcolor="write", compound=True, 
normalize=False, encoding='UTF-8') 
  • directed -> False | True:有向图
  • strict -> True | False:简单图
  • nodesep:同级节点最小间距
  • ranksep:不同级节点最小间距
  • rankdir:绘图方向,可选 TB (从上到下), LR (从左到右), BT (从下到上), RL (从右到左)
  • splines:线条类型,可选 ortho (直角), polyline (折线), spline (曲线), line (线条), none (无)
  • concentrate -> True | False:合并线条 (双向箭头)
  • bgcolor:背景颜色
  • compound -> True | False:多子图时,不允许子图相互覆盖
  • normalize -> False | True:以第一个节点作为顶节点

添加节点

G.add_node(name, label=None, fontname="Times-Roman", 
fontsize=14, shape="ellipse", style="rounded", 
color="black", fontcolor="black", pos="x,y(!)",
 fixedsize=False, width=1, height=1) 

G.add_nodes_from(names, **attr) # 批量添加点,参数同上

  • name -> str:节点名。label 为节点标签,未指定时显示 name
  • fontname:字体名称,常用:Microsoft YaHei, SimHei, KaiTi, SimSun, FangSong, Times-Roman, Helvetica, Courier。可以使用 “times bold italic” 表示字体类型、粗细、倾斜
  • fixedsize -> Flase | True | "shape":固定大小,默认随文本长度变化。设置为 True 时,width 和 height 参数共同控制点大小。设置为 "shape" 时,将取标签文本和设置值的较大者 style:节点线样式,使用color` 设置线条颜色 (style=“filled” 时,设置填充颜色)
    在这里插入图片描述
  • Shape:节点形状
    在这里插入图片描述
    添加边
G.add_edge(origin, target, color="black", style="solid", 
penwidth=1, label="", fontname="Times-Roman", fontsize=14,
fontcolor="black", arrowsize=1, arrowhead="normal", 
arrowtail="normal", dir="forward")   

G.add_nodes_from([[origin_1, target_1], [origin_2, target_2],…], **attr) # 批量添加线,参数同上

  • label -> str:边标签,未指定时不显示
  • penwidth:线条粗细
  • arrowsize:箭头大小
  • arrowhead:箭头类型,可选 normal, vee
  • dir:箭头方向,可选 both, forward, back, none。只有在无向图中才起作用!

导出图形

G.layout()    
G.draw(file_name, prog="neato")  
  • prog:布局算法,可选 neato, dot (荐), twopi, circo, fdp

== 以上来自于知乎某大佬的文章==

关键代码

1.#设置节点  
G.add_node(root,style="filled",shape="box3d",color="#feb64d")  
for positive in[eval(_) for _ in dir() if _.startswith("positive")]:     G.add_node(positive,style="filled",shape="circle",color="#CFDBF6",fontname="FangSong")  
for negative in[eval(_) for _ in dir() if _.startswith("negative")]:  
    G.add_node(negative, style="filled", shape="polygon", color="#B4E7B7",fontname="FangSong")  
#添加边  
G.add_edges_from([[root,positive_1],[root,positive_2],[root,positive_3],[root,positive_4],[root,positive_5]],  color="#CFDBF6",style="dashed",penwidth=1.5)  
G.add_edges_from([[positive_1,negative_6],[positive_1,negative_7],[positive_1,negative_8],          [positive_2,negative_9],[positive_2,negative_10],[positive_2,negative_11],[positive_2,negative_12],
[positive_2,negative_13],[positive_2,negative_14],[positive_3,negative_15],[positive_3,negative_16],
[positive_3,negative_17],[positive_3,negative_18],[positive_3,negative_19],[positive_3,negative_20],
[positive_4,negative_21],[positive_5,negative_22],[positive_5,negative_23],[positive_5,negative_24],
[positive_5,negative_25],[positive_5,negative_26]], color="#B4E7B7", style="dashed", penwidth=1.5)  
G.layout()  
G.draw("组织架构.png",prog="dot")  

实验效果图

在这里插入图片描述

代码

import pygraphviz as pgv
G = pgv.AGraph(directed=True,rankdir="TB",encoding='UTF-8')#有向从上到下
#设置节点
root = "CEO"
positive_1="COO"
positive_2="CTO"
positive_3="CMO"
positive_4="CFO"
positive_5="CSO"
negative_6="客服售后vp"
negative_7="仓储vp"
negative_8="工程VP"
negative_9="前台VP"
negative_10="后台VP"
negative_11="架构VP"
negative_12="数据VP"
negative_13="云VP"
negative_14="产品VP"
negative_15="大客户总监"
negative_16="公关VP"
negative_17="市场SVP"
negative_18="POP VP"
negative_19="图书VP"
negative_20="家电VP"
negative_21="财务VP"
negative_22="法务VP"
negative_23="审计总监"
negative_24="战略总监"
negative_25="行政总监"
negative_26="人力VP"
#设置节点
G.add_node(root,style="filled",shape="box3d",color="#feb64d")
for positive in[eval(_) for _ in dir() if _.startswith("positive")]:
    G.add_node(positive,style="filled",shape="circle",color="#CFDBF6",fontname="FangSong")
for negative in[eval(_) for _ in dir() if _.startswith("negative")]:
    G.add_node(negative, style="filled", shape="polygon", color="#B4E7B7",fontname="FangSong")
#添加边
G.add_edges_from([[root,positive_1],[root,positive_2],[root,positive_3],[root,positive_4],[root,positive_5]],
                 color="#CFDBF6",style="dashed",penwidth=1.5)
G.add_edges_from([[positive_1,negative_6],[positive_1,negative_7],[positive_1,negative_8],
                  [positive_2,negative_9],[positive_2,negative_10],[positive_2,negative_11],[positive_2,negative_12],[positive_2,negative_13],[positive_2,negative_14],
                  [positive_3,negative_15],[positive_3,negative_16],[positive_3,negative_17],[positive_3,negative_18],[positive_3,negative_19],[positive_3,negative_20],
                  [positive_4,negative_21],[positive_5,negative_22],[positive_5,negative_23],[positive_5,negative_24],[positive_5,negative_25],[positive_5,negative_26]],
                 color="#B4E7B7", style="dashed", penwidth=1.5)
G.layout()
G.draw("组织架构.png",prog="dot")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值