DC.JS散点图图表选择

时间:2016-11-24 16:03:56

标签: javascript d3.js charts scatter-plot dc.js

enter image description here

嗨,我正在使用dc.js。

我无法理解如何获取用于构建屏幕截图中显示的工具提示的数据。

如何在事件处理程序brush.on('brushend.foo',function(){})中获取所选项目?

这是我绘制工具提示的处理程序:

var brush = this.chart.brush();
    brush.on('brushend.foo', function() {
      let selection = self.chart.select('.extent');


      let tooltipValues = {
        maxProbability:  '-',
        minProbability: '-',
        minImpact: '-',
        maxImpact: '-',
      }
      selection.on('mousemove', function(){
        selection.on
          div.transition()
           .duration(200)
           .style("opacity", 1);

         div.html(
           `
           <div> Probability (percents) max: ${tooltipValues.maxProbability} <div>
           <div> Probability (percents) min: ${tooltipValues.minProbability} <div>
           <div> Impact max: ${tooltipValues.maxImpact} <div>
           <div> Impact min ${tooltipValues.minImpact} <div>
           `
         )
             .style("left", (event.pageX) + "px")
             .style("top", (event.pageY - 28) + "px")
             .style("class", "content")

      })
      .on("mouseout", function(d) {
          div.transition()
              .duration(300)
              .style("opacity", 0);
      });
    });

2 个答案:

答案 0 :(得分:1)

您使用d作为函数的参数。根据您的数据显示,d将具有不同的属性。例如d.xd.y,或d.impactd.probability

selection.on('mousemove', function(d){
    console.log('Hovering x at ' + d.x + ' and y at' + d.y);
    console.log(d);
});

答案 1 :(得分:1)

我没有尝试使用图表中的点,而是使用crossfilter对象来检索数据。 (毕竟我们MVC中的模型是交叉滤波器。)

因此,您可以使用self.chart.dimension().top(Infinity)获取当前已过滤的所有原始数据行。请注意,dimension.topgroup.all的工作方式不同,因为它 观察自己的过滤器。这就是你想要的。

如果您更愿意使用缩减(分组)数据,则必须创建一个单独的维度&amp;小组只是为了观察所有过滤器。

这里要注意的重要一点是选择不是特定于画笔或图表。由于散点图已经观察到其他图表上的任何过滤器,并且您对散点图上的画笔感兴趣,因此结果与交叉过滤器实例中完全过滤的行集相同。