javascript - 过滤到较窄范围时 dc.js 条形图上的颜色问题

标签 javascript d3.js charts dc.js

我正在制作 dc.js 条形图。该图表的颜色数组中有三种颜色,具体取决于条形图的值以及它们是否高于、低于或处于数值范围的平均值。它使用外部过滤器根据传入的规范重新创建图表值。如果您使用外部过滤器将图表的 y 值缩小到相对较小的范围,则条形图将变成单色图表(特别是颜色中的第三种颜色)范围)。进一步的检查似乎表明它与 dc.js 过滤无关,但当值的范围足够窄时可能会发生什么。

当范围较宽时,颜色会正确变化,但当范围变窄时,突然所有条形都变成相同的颜色。

图表:

 that.ownerChart
            .width(400)
            .height(400)
            .margins({top: 0, left: 10, right: 10, bottom: 20})
            .dimension(that.dims.dOwner)
            .group(that._remove_empty_bins(that.groups.gOwner, (d) => { return d.value.avg; }))
            .ordering(function (x) {
                return x.value.avg * -1;
            })
            .on('filtered', onFilter)
            .fixedBarHeight(30)
            .cap(cap).othersGrouper(false)
            .elasticX(true)
            .renderTitleLabel(false)
            .leftLabel(function(x) {
                return x.key;
            })
            .leftLabelWidth(160)
            //The problematic line might be here
            .colorScale(d3.scale.quantize().range(that.colors));

为了清楚起见,根据之前的答案进行了编辑。

最佳答案

提供一个工作示例会更容易。也就是说,d3.scale.quantize() 可能保留了未过滤图表中的值域。

我在 dc.leaflet.js 中看到了类似的 choropleths 问题。这实际上是一种设计选择,您是否希望颜色始终保持一致,或者缩放到当前域以获得更大的对比度。

您可以使用calculateColorDomain每次重绘时重新计算域:

chart.on('preRedraw', function(chart) {
    chart.calculateColorDomain();
});

这将调用图表中所有值的颜色访问器,并用颜色值数组替换色标的域。

关于javascript - 过滤到较窄范围时 dc.js 条形图上的颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410469/

相关文章:

javascript - 在React中动态创建多级下拉菜单并获取下拉菜单中选定子菜单的值

javascript - 为什么 Angular ChartJS 中的一个标签上有更多列?

javascript - 是否可以使用 D3 在圆环图的弧形中插入图标​​?

javascript - 单击 ChartJS 饼图切片以隐藏该切片

javascript - jQuery 和 <dialog> 元素

javascript - google+ 分享和 onendinteraction - 不确认

javascript - 返回范围内所有数字的总和

javascript - 在 d3.js 中更改某行的颜色

javascript - 删除 svg 矩形绘制行中的魔数(Magic Number)

javascript - 为什么 d3.js 组元素在第一次拖动时会跳跃?