【问题标题】:Replicating Mike Bostock's collapsible tree复制 Mike Bostock 的可折叠树
【发布时间】:2013-06-09 22:24:21
【问题描述】:

我想复制 Mike Bostock 的可折叠树图形 (http://bl.ocks.org/mbostock/4339083)。

我使用d3.js 中的nest 函数加载了一个CSV。现在,数据看起来像这样:

 [
  {
    "key": "Bayer HealthCare",
    "values": [
      {
        "key": "Animal Health",
        "values": [
          {
            "key": "Companion Animal",
            "values": [
              {
                "brand": "Drontal",
                "product": "Companion Animal",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              },
              {
                "brand": "Profender",
                "product": "Companion Animal",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              },
              {
                "brand": "Rompun",
                "product": "Companion Animal",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              }
            ]
          },
          {
            "key": "Companion Animal - Food Animal Product",
            "values": [
              {
                "brand": "Baytril",
                "product": "Companion Animal - Food Animal Product",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              }
            ]
          },
          {
            "key": "Companion animals",
            "values": [
              {
                "brand": "Advantage",
                "product": "Companion animals",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              },
              {
                "brand": "Advantix",
                "product": "Companion animals",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              },
              {
                "brand": "Advocate",
                "product": "Companion animals",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              }
            ]
          },
          {
            "key": "Food Animal Product",
            "values": [
              {
                "brand": "Baycox",
                "product": "Food Animal Product",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              },
              {
                "brand": "Catosal",
                "product": "Food Animal Product",
                "subgroup": "Bayer HealthCare",
                "division": "Animal Health"
              }
            ]
          }
        ]
      }
.....

(完整的数据和我目前所做的可以在这里找到:http://jsfiddle.net/L3phF/9/

不幸的是,我不知道如何将数据转换为像 https://gist.github.com/mbostock/1093025 这样的“FLARE JSON”格式。如果是正确的,我必须将“key”重命名为“name”,将“values”重命名为“children”,并且我必须在最低级别的每个对象前面插入“”name:“”。

感谢您的帮助!

【问题讨论】:

    标签: json d3.js flare


    【解决方案1】:

    这会将“key”重命名为“name”,将“values”重命名为“children”:

    var renameKeys=function(obj){
        /*Recursively renames "key" keys to "name" and
        renames "values" keys to "children" */
        obj.name=obj.key;
        delete obj['key'];
        if(obj.values){
            obj.children=obj.values;
            delete obj.values;
            obj.children.forEach(renameKeys);
        }
        return obj;
    };
    

    您还需要为 JSON 提供一个“根”节点,以便使用您链接到的可折叠树可视化。应该这样做:

    var nest = d3.nest()
        .key(function(d) { return d.subgroup; })
        .key(function(d) { return d.division; })
        .key(function(d) { return d.product; })
        .entries(parsed);
    
    /*The visualization requires there to be a root node*/
    var flareData={key:'root',values:[]};
    flareData.values=nest;
    renameKeys(flareData);
    

    这里有一个 JSFiddle 来获取你想要的 JSON:http://jsfiddle.net/X2fxC/3/

    这是一个带有可视化结果的 JSFiddle:http://jsfiddle.net/X2fxC/5/

    使用扩展树可视化绘制时,您的数据如下所示:

    【讨论】:

    • 感谢您的帮助。不幸的是,您发布的 JSFiddle 似乎不起作用。我错过了什么吗?再次感谢。
    • @majom:代码以您要查找的格式生成 JSON。我已经更新了答案以在可视化中包含一个 JSFiddle:jsfiddle.net/X2fxC/5
    • 感谢您的帮助!太好了!
    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多