DC.js 刷到 select 范围不适用于 scaleTime

DC.js brush to select range not working with scaleTime

序言 这是我第一次发布到 Whosebug,我是 dc.js 的菜鸟。对礼节违规行为提前致歉(也欢迎反馈)

问题 我已经定义了一个条形图并且它显示完美,但是 brushOn(true) 不允许我过滤数据。过去,这似乎与我将鼠标悬停在条形图上时出现的十字准线完美配合。现在不是了。知道为什么吗?或者我能做些什么来解决它?我在第 3 天试图弄清楚发生了什么。非常感谢您的帮助!

先决条件:

https://d3js.org/d3.v5.min.js
crossfilter.min.js
https://unpkg.com/dc@3.0.4/dc.js

条形图代码 我定义了一个条形图如下:

filterDim = cross.dimension(function(d){return d3.timeWeek(d.date);});
var filterGroup = filterDim.group().reduceSum(function(d){
    if(d.isTrue){return 1;}
    else {return 0;} });

height=400;
if(width == 0){
    width = $(dom_id).parent().innerWidth();
}
var hitsbarChart  = dc.barChart(dom_id);
hitsbarChart
    .width(width).height(height)
    .dimension(sentDimension)
    .group(allGroups[0].data,allGroups[0].name)
    .xUnits(d3.timeWeeks);

hitsbarChart
    .x(d3.scaleTime())
    .valueAccessor(function(d){return d.value;})
    .keyAccessor(function(d){return d.key;})
    .round(d3.timeWeek.round)
    .yAxis().ticks(d3.format('.3s'));

    function calc_domain(chart) {
        var min = d3.min(chart.group().all(), function(kv) { return kv.key; }),
        max = d3.max(chart.group().all(), function(kv) { return kv.key; });
        max = d3.timeMonth.offset(max, 1);
        chart.x().domain([min, max]);
    }
hitsbarChart.on('preRender', calc_domain);
hitsbarChart.on('preRedraw', calc_domain);

hitsbarChart.brushOn(true);
dc.renderAll();

研究

我发现 this example 它展示了一些不同的东西,但输出了一个以时间序列为 x 轴和工作画笔到 select 日期范围的图表。

此外,还有 this bug with work-around,但变通办法没有奏效。我无法想象时间序列数据更像是一个序数尺度而不是数字尺度。

很可能您有一些 CSS 无意中影响了您的图表,而图表本应控制页面的其他部分。

发生这种情况的原因可能是您使用了 dc.js 或 d3.js 也使用的通用名称,或者是另一个库中的样式 sheet。所有 dc.js's style rules 都经过仔细界定,以免影响其他任何人,但许多常用词用于 class 名称,因此其他方式的干扰很常见。

刷牙行为来自 d3,所以我会尝试在您的开发人员工具的检查器中查看 d3 的 g.brush rect.overlay。您应该能够通过右键单击图表背景并选择“检查”来调出它。

如果它有类似的东西

pointer-events: none;

display: none;

适用于它,找出它适用的是什么(希望 CSS 你能控制)并尝试使规则更具体。

当然也有可能来自其他库的 JavaScript 造成这样的麻烦,但是来自 CSS 的干扰更为常见。