【问题标题】:How to filter a range of elements in d3js?如何过滤d3js中的一系列元素?
【发布时间】:2015-05-01 18:00:14
【问题描述】:

我需要向下翻译鼠标所在元素下方的所有元素。目前我可以使用 .filter 过滤选择。以下代码可以过滤元素 i>10 的选择。如何使用 mouseover 元素的当前 id 而不是“10”。 或者,如果有更好的方法来转移进行中的元素,那就太好了。 谢谢

var bars = chart.selectAll('.bar')
    .data(data)
    .enter().append('g')
    .attr('class', 'bar')
    .attr('transform', function(d, i) {
        return 'translate(0,' + y(i) + ')';
    })
    .on("mouseover", function(d, i) {
        d3.select(this)
        .filter(function(d,i ) { console.log(this);return i>10 })
            .attr('transform', function(d, i) {
                return 'translate(0,' + (y(i)) + ')';
            });
    });

Live Here

【问题讨论】:

  • 基本上我想把它做成一个手风琴风格的条形图。单击特定栏后,以下元素会向下移动。

标签: javascript jquery d3.js bar-chart data-visualization


【解决方案1】:
var bubble = d3.layout.pack()
    ...

d3.json("js/data/fortune2009.json", function(json) {

    var node = svg.data([json]).selectAll("g.node")
        .data(bubble.nodes); // filter here?

    node.enter()
        .append("g")
        .attr("class", "node")
        .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

    node.append("circle")
        .attr("r", function(d) { return d.r; })
        .attr("class", function(d) { return "q" + color(d.Profit) + "-9"; });

    node.filter(function(d) { return !d.children; })
        .append("text")
        .attr("dy", ".3em")
        .style("text-anchor", "middle")
        .text(function(d) { return d.Company.substring(0, d.r / 3); });
});

【讨论】:

  • 虽然此代码可能会解决问题,但几句话的解释将大大有助于培训当前和未来的读者了解此答案。
【解决方案2】:

将返回中的i 替换为$(this).attr('id') 以获取鼠标悬停元素的ID。

.on("mouseover", function(d, i) {
        d3.select(this)
        .filter(function(d,i ) { console.log(this);return $(this).attr('id') >10 })
            .attr('transform', function(d, i) {
                return 'translate(0,' + (y(i)) + ')';
            });
    });

[更新] - 如果您看到 Lars 的评论,他正确地指出,如果您正在寻找的 id 包含在您的 data 中,您可以通过简单地访问它(并且更有效)通过执行d.id 而不是通过元素的 id 属性。

【讨论】:

  • 或者实际上只是d.id
  • @LarsKotthoff 将返回 data.id - 这可能与元素 ID 不同。还是我错了?
  • 问题中并不清楚,但我认为ID在数据中。
  • 由于排序功能,ID 没有按顺序显示。但我现在删除了排序,这有助于过滤数据。 .filter(function(d) { console.log(d.id);return i<d.id; }) 。我不确定如何向下翻译元素。这是当前的鼠标悬停代码.on("mouseover", function(d, i) { d3.selectAll('.bar') .filter(function(d) { console.log(d.id);return i<d.id; }) .attr('transform', function(d) { return 'translate(0,' + (y(i)) + ')'; })
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多