python画树形节点图 可生成png gif eps等格式

效果图

image

需要安装的模块 snapshot_phantomjspyechartsjson
需要的exe文件:phantomjs.exe 【链接:https://pan.baidu.com/s/1e5xHUy1h5xzF97zcybXV_Q
提取码:k595】
phantomjs.exe需要和代码放在同一个路径下

代码

from pyecharts import options as opts
from pyecharts.charts import Tree
from pyecharts.render import make_snapshot
from snapshot_phantomjs import snapshot
import json

# 用于构建 json格式的数据
def find_node(node):
    s1 = "{\"name\":\"" + node + "\""
    if node in all_map:
        s1 += ",\"children\":["
        children = all_map[node].split(",")
        c_len = len(children)
        for i in range(c_len):
            s1 += find_node(children[i])
            if i < c_len - 1:
                s1 += ","
        s1 += "]"
    s1 += "}"
    return s1

# 数据格式, 父子关系,冒号前面的是父节点,冒号后面的是子节点集合,子节点用逗号分隔。每对父子关系用分号隔开
data0 = "SINK:1,2,3;1:4,5;2:6,7,8;3:9;4:10;8:11,12;9:13,14,15;15:16"

data = data0.split(";")   # 想要不同的数据,直接在这里修改即可

all_map = {}
for i in range(len(data)):
    lines = data[i].split(":")
    all_map[lines[0]] = lines[1]

data = [json.loads(find_node("SINK"))]



"""
    通过height来控制层级之间的高度
"""

tree = (
    # 调整width,使得横向上,节点不会太密集,调整height,控制每层之间的高度
    Tree(init_opts=opts.InitOpts(width="500px", height="300px"))
        .add("",
             data,
             orient="TB",
             pos_top="5%",   # pos_xxx,表示图形与图片四个边界的距离,根据具体需求调整
             pos_bottom="10%",
             pos_left="1%",
             pos_right="1%",
             initial_tree_depth=-1,
             symbol_size=20,   # 圆圈大小

             label_opts=opts.LabelOpts(
                 position="inside",
                 color="black",   # 数字颜色
                 font_size=7),   # 数字大小

             leaves_label_opts=opts.LabelOpts(
                 position="inside",
                 color="black"),   # 叶子节点的数字颜色

             itemstyle_opts=opts.ItemStyleOpts(
                 border_color="steelblue")   # 圆圈的颜色
             )
)
# 图片路径
pic_gif = "1.gif"
pic_eps = "1.eps"

# 可以选择同时生成gif,也可以选择单独生成其中一个
make_snapshot(snapshot, tree.render(), pic_gif)   # 生成gif
# make_snapshot(snapshot, tree.render(), pic_eps)   # 生成eps


posted @ 2022-04-24 16:53  aliving  阅读(515)  评论(0)    收藏  举报