D3.js通过刷序数量表聚焦+上下文

时间:2016-06-16 13:04:56

标签: javascript d3.js graph ordinal

我仍然是d3.js的新手,并通过刷涂添加了Focus + Context到我的Scatter图,该图具有对数y轴和序数x轴刻度,但它没有按预期工作。刷涂似乎在X轴上的偏移处起作用,但不仅仅显示所选的项目/项目。

以下是我的拉丝功能:

// Brush Function
function brushed() {
  var extent = brush.extent();
  var d = xScale2.domain(),
      r = xScale2.range();
  extent = extent.map(function(e) { return d[d3.bisect(r, e) - 1]; });
  xScale.domain(brush.empty() ? d : extent);
  focus.select(".x.axis")
        .call(xAxis)
       .selectAll("text")
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", ".15em")
        .attr("transform", "rotate (-65)");
  focus.selectAll(".point")
        .attr("d", d3.svg.symbol().type(function(d) { return symbols[d.TYPE_CODE]; }))
        .attr("transform", function(d) { return "translate(" + xScale(dateFn(d)) + "," + yScale(d.TYPE_VALUE) +  ")"; })
        .style("fill", function(d) { return colors[d.TYPE_CODE]; });
}

如果有人可以帮忙解决这个问题(尤其是我需要改变的所有地方以及如何改变),我很乐意让这个工作并了解我做错了什么。

完整代码:http://jsfiddle.net/brebuck/LL42b4L7/

1 个答案:

答案 0 :(得分:0)

找出我自己的问题解决方案。

将画笔功能更改为:

// Brush Function
function brushed() {
  var extent = brush.extent();
  var d = xScale2.domain();

  // Find out what is selected between the extent on the Ordinal Axis.
  var SymbolInside = data.filter(function(d) {
    return extent[0] <= xScale2(dateFn(d)) && xScale2(dateFn(d)) <= extent[1];
  });

  // Convert the Array of objects to return a single array of dates used for the ordinal axis.
  SymbolInside = SymbolInside.map(function (d) { return dateFn(d); });

  xScale.domain(brush.empty() ? d : SymbolInside);
  focus.select(".x.axis")
        .call(xAxis)
       .selectAll("text")
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", ".15em")
        .attr("transform", "rotate (-65)");
  focus.selectAll(".point")
        .attr("d", d3.svg.symbol().type(function(d) { return symbols[d.TYPE_CODE]; }))
        .attr("transform", function(d) { return "translate(" + xScale(dateFn(d)) + "," + yScale(d.TYPE_VALUE) +  ")"; })
        .style("fill", function(d) { return colors[d.TYPE_CODE]; });
}

更新了代码:http://jsfiddle.net/brebuck/LL42b4L7/