所以我在这个答案中为我的代码 sn-p 推荐和使用的库 不是 python 库,但它是一个 python 友好的库,我的意思是使用这个库的代码可以插入到 python 模块中来处理数据,这个 foreign 代码将连接到两端现存的 python 代码,即输入和输出,我怀疑,虽然我当然不知道,这就是“python 库”标准的真正含义。因此,如果您正在编写 Web 应用程序,则此代码将是客户端的。换句话说,这个库不是python,但它可以与python一起使用。
它的输入是(几乎)原始的 python dicts,更具体地说,json.load(a_python_dict) 返回一个 json 数组或对象,这种格式javascript库当然可以识别;和
输出格式是 HTML 或 SVG,而不是某些对象
特定语言格式
您可以使用d3.js。它有一个class 专门用于渲染树:
var tree = d3.layout.tree().size([h, w]);
d3 源的 example 文件夹 中还有几个树的示例(工作代码),您可以从我提供的链接中克隆/下载它们以上。
因为d3是一个javascript库,它的原生数据格式是JSON。
基本结构是一个嵌套字典,每个字典代表一个具有两个值的单个节点,节点的名称及其子节点(存储在一个数组中),键为 names 和儿童:
{"name": "a_root_node", "children": ["B", "C"]}
当然,在 python 字典和 JSON 之间转换也很简单:
>>> d = {"name": 'A', "children": ['B', 'C']}
>>> import json as JSON
>>> dj = JSON.dumps(d)
>>> dj
'{"name": "A", "children": ["B", "C"]}'
这是一个较大的树(十几个节点)的python dictionary 表示,我如上所述将其转换为 json,然后在 d3 中呈现为所示的树在下图中:
tree = {'name': 'root', 'children': [{'name': 'node 2', 'children':
[{'name': 'node 4', 'children': [{'name': 'node 10', 'size': 7500},
{'name': 'node 11', 'size': 12000}]}, {'name': 'node 5', 'children':
[{'name': 'node 12', 'children': [{'name': 'node 16', 'size': 10000},
{'name': 'node 17', 'size': 12000}]}, {'name': 'node 13', 'size': 5000}]}]},
{'name': 'node 3', 'children': [{'name': 'node 6', 'children':
[{'name': 'node 14', 'size': 8000}, {'name': 'node 15', 'size': 9000}]},
{'name': 'node 7', 'children': [{'name': 'node 8', 'size': 10000},
{'name': 'node 9', 'size': 12000}]}]}]}
注意:d3在浏览器中渲染;上图只是我的浏览器窗口的屏幕截图。