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

需要安装的模块 snapshot_phantomjs、pyecharts、json
需要的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

浙公网安备 33010602011771号