【问题标题】:How do I calculate the size attributes for my tree elements in json?如何计算 json 中树元素的大小属性?
【发布时间】:2013-09-21 18:01:45
【问题描述】:

在许多 d3 可视化示例中,flare.json 被用作树数据结构的示例,如下所示:

{
 "name": "flare",
 "children": [
  {
   "name": "analytics",
   "children": [
    {
     "name": "cluster",
     "children": [
      {"name": "AgglomerativeCluster", "size": 3938},
      {"name": "CommunityStructure", "size": 3812},
      {"name": "HierarchicalCluster", "size": 6714},
      {"name": "MergeEdge", "size": 743}
     ]
    },
    {
     "name": "graph",
     "children": [
      {"name": "BetweennessCentrality", "size": 3534},
      {"name": "LinkDistance", "size": 5731},
      {"name": "MaxFlowMinCut", "size": 7840},
      {"name": "ShortestPaths", "size": 5914},
      {"name": "SpanningTree", "size": 3416}   

本例中的每个元素,除了根,都有一个 size 属性。 size 属性是根据它在树中的相对分区计算的(即它有/没有多少孩子、子孩子)。这是一个d3 example,其中这个大小“属性”用于计算 d3 树图中元素的大小。

我自己的数据看起来像这样,但没有大小属性​​。如何使用像 python 这样的脚本语言计算我的数据的大小属性?或者我什至必须自己写,我可以用一种更简单的方式来做吗?

【问题讨论】:

  • size 属性是如何计算的?从您的示例或链接的flare.json 中不清楚。至少提供一个指向flare.json 用法的链接。从那里可以猜测 size 属性的实际含义。
  • 我不确定我是否有这个权利?树的每个分支的大小属性是否应该本质上是树上叶节点数的计数?或者也许是它下面的总分支数,包括树叶?还是我只是,咳咳,找错树了?

标签: javascript python json d3.js


【解决方案1】:

我不确定你到底想要什么,但可能你想总结子分支的大小并将其作为父节点的大小(以防它还没有一组)。这将在 Python 中像这样完成:

def sizify(tree):
  children = tree.get('children', None)
  if children:
    children = [ sizify(child) for child in children ]
    size = (tree['size'] if 'size' in tree
      else sum(child['size'] for child in children))
  else:
    size = tree.get('size', 0)
  tree['size'] = size
  if children:
    tree['children'] = children
  return tree

对于上面的树,这给出了类似的东西:

{'children': [{'children': [{'children': [{'name': 'AgglomerativeCluster',
                                           'size': 3938},
                                          {'name': 'CommunityStructure',
                                           'size': 3812},
                                          {'name': 'HierarchicalCluster',
                                           'size': 6714},
                                          {'name': 'MergeEdge',
                                           'size': 743}],
                             'name': 'cluster',
                             'size': 15207},
                            {'children': [{'name': 'BetweennessCentrality',
                                           'size': 3534},
                                          {'name': 'LinkDistance',
                                           'size': 5731},
                                          {'name': 'MaxFlowMinCut',
                                           'size': 7840},
                                          {'name': 'ShortestPaths',
                                           'size': 5914},
                                          {'name': 'SpanningTree',
                                           'size': 3416}],
                             'name': 'graph',
                             'size': 26435}],
               'name': 'analytics',
               'size': 41642}],
 'name': 'flare',
 'size': 41642}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2015-07-13
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多