javascript - 使用 javascript 和 d3js 将 __data__ 从父节点分配给子节点

标签 javascript arrays dom d3.js

我正在为我的 d3js 图表创建一个图例 (var legend)。数据绑定(bind)到父“g”元素,特别是我需要在子“text”元素中获取的字符串(标签)。

问题:如何将“g”元素中的父数据分配给子文本元素?

代码:

var legend = svg.selectAll(".legend")
        .data(color.domain().slice().reverse()) // color is array of strings with length = 6
            .enter().append("g")
            .attr("class", "legend")
            .attr("transform", function(d, i) { return "translate(-20," + i * 20 + ")"; });


        legend.data(headers).enter().append("text") // headers is array of strings with length = 6
              .attr("x", width - 24)
              .attr("y", 9)
              .attr("dy", ".35em")
              .style("text-anchor", "end")
              .text(function(d) { return this.parentElement.__data__; }); // not working code here

谢谢!完整代码:https://github.com/DeBraid/www.cacheflow.ca/blob/master/styles/js/d3kickchart.js

最佳答案

您的工作量比完成所有这些手动记账所需的努力要多得多。将同一数据的不同表示结合在一起是 D3 的强项之一。通常,您希望单个数组中的所有记录尽可能非规范化,而不是尝试手动使用索引和多个列表来关联信息。

关于line 21在创建数据记录的位置,只需添加一个附加属性来保存范围标签,并将这些范围用作 color 轴的域。 (您还可以查看 d3 的 nest 运算符...)

您的图例可以像这样简单( jsfiddle ):

var categories = ["foo", "bar", "baz", "qux", "zoo", "yaw"];

var color = d3.scale.ordinal()
    .domain(categories)
    .range(["#98ABC5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c"]);

d3.select("#legend")
    .selectAll("div")
    .data(categories)
    .enter()
    .append("div")
    .style("background-color", color)
    .text(function(d) { return d });

关于javascript - 使用 javascript 和 d3js 将 __data__ 从父节点分配给子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895601/

相关文章:

C++简单数组元素比较

gwt - 弹出面板显示在小部件下方

java dom 转义字符

javascript - 使用 html5 localstorage 从服务器检索数据,允许编辑和附加到数据源,然后保存回服务器

php - url 编码的奇怪问题

c++ - 将 .txt 文件读入数组

php - 删除外部数组 :

javascript - 我没有使用的阵列如何更新?

javascript - 使用 Service Worker 预缓存静态文件

javascript - 如何在 Chrome 之外操作 object.style.animationDuration?