![](/img/trans.png)
[英]Why do my DOM elements lose their location attributes when I size my SVG based on container size?
[英]How do I calculate the size attributes for my tree elements in json?
在許多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屬性。 大小屬性是根據其在樹中的相對分區(即,它有/沒有的子代數)計算的。 這是一個d3示例 ,其中此大小“屬性”用於計算d3樹形圖中元素的大小。
我自己的數據看起來像這樣,但是沒有size屬性。 如何使用python之類的腳本語言計算數據的大小屬性? 還是我什至必須自己編寫它,我可以用一種更簡單的,已經完成的方式來編寫它嗎?
我不確定您到底想要什么,但是可能您想總結一下子分支的大小,並將其作為父節點的大小(以防萬一它還沒有一套)。 可以這樣在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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.