D3 фильтрация корневых данных из flare.csv для treemap

#javascript #csv #d3.js #filter

#javascript #csv #d3.js #Фильтр

Вопрос:

У меня есть следующие данные в формате csv, сохраненные в вызываемой переменной csvData , и я пытаюсь показать только определенные их части. Переменная форматируется следующим образом …

 var csvData = 'id,value
flare,
flare.analytics,
flare.analytics.cluster,
flare.analytics.cluster.AgglomerativeCluster,3938
flare.analytics.cluster.CommunityStructure,3812
flare.analytics.cluster.HierarchicalCluster,6714
flare.analytics.cluster.MergeEdge,743
flare.analytics.graph,
flare.analytics.graph.BetweennessCentrality,3534
flare.analytics.graph.LinkDistance,5731
flare.analytics.graph.MaxFlowMinCut,7840
flare.analytics.graph.ShortestPaths,5914
flare.analytics.graph.SpanningTree,3416
flare.analytics.optimization,
flare.analytics.optimization.AspectRatioBanker,7074
flare.animate,
flare.animate.Easing,17010
flare.animate.FunctionSequence,5842
flare.animate.interpolate,
flare.animate.interpolate.ArrayInterpolator,1983
flare.animate.interpolate.ColorInterpolator,2047
flare.animate.interpolate.DateInterpolator,1375
flare.animate.interpolate.Interpolator,8746
flare.animate.interpolate.MatrixInterpolator,2202
flare.animate.interpolate.NumberInterpolator,1382
flare.animate.interpolate.ObjectInterpolator,1629
flare.animate.interpolate.PointInterpolator,1675
flare.animate.interpolate.RectangleInterpolator,2042
flare.animate.ISchedulable,1041
flare.animate.Parallel,5176
flare.animate.Pause,449
flare.animate.Scheduler,5593
flare.animate.Sequence,5534
flare.animate.Transition,9201
flare.animate.Transitioner,19975
flare.animate.TransitionEvent,1116
flare.animate.Tween,6006'
  

Я могу отобразить все данные в treemap, вставив их вот так…

 var stratify = d3.stratify()
    .parentId(function(d) {
        return d.id.substring(0, d.id.lastIndexOf("."));
    });

var treemap = d3.treemap()
    .size([width, height])
    .padding(1)
    .round(true);

var data = d3.csvParse(csvData, function(d) {
    return {
        id: d.id, // lowercase
        value:  d.value // lowercase
    };
});

var root = stratify(data)
    .sum(function(d) {
        return d.value;
    })
    .sort(function(a, b) { return b.height - a.height || b.value - a.value; });

treemap(root);
  

А затем использует .data(root.leaves()) вот так…

 d3.select("#treeChart")
    .selectAll(".node")
    .data(root.leaves())
    .enter().append("div")
    .attr("class", "node")
    //... more stuff here ...
  

Но это показывает все, и я просто хочу показать analytics часть, а НЕ animate часть. Из того, что я собрал, мне нужно отфильтровать корневые данные, но я не уверен, как это сделать. В конце концов, я хотел бы иметь выпадающий список, который переключается между analytics и animate , но это становится вторым сообщением. Итак, я начинаю с показа начальной analytics части.

Ответ №1:

Вместо root.leaves() того, чтобы вы должны использовать:

 root.children.find( e => e.id === "flare.analytics").leaves()
  

Или

 root.children.find( function(e) { return e.id === "flare.analytics";}).leaves()
  

То есть найдите дочерний элемент «analytics» из root и получите его листья.

Комментарии:

1. Что, если я не могу использовать функции со стрелками? Я пробовал перевод babel, но не смог заставить его работать. root.children.find(функция (e) { возврат e.id === «flare.analytics»; });

2. @Layne — я отредактировал ответ. Я забыл вызвать метод листьев. Надеюсь, это поможет.

3. Я не забыл о тебе. Как только я смогу это протестировать, я проверю это. Спасибо за вашу помощь.