在dc.js柱状图上的颜色问题,当过滤到一个狭窄的范围
Color issue on dc.js bar chart when filtered into a narrow range
我正在制作一个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.leaf .js中看到过类似的绒毛问题。这实际上是一个设计选择,你是否希望颜色始终保持一致,或缩放到当前的域,以获得更多的对比。
您可以使用calculateColorDomain在每次重绘时重新计算域:
chart.on('preRedraw', function(chart) {
chart.calculateColorDomain();
});
这将为图表中的所有值调用颜色访问器,并用颜色值数组替换色阶域。
相关文章:
- 如何创建一个方法来验证数组的范围
- 引用“;instanceof“/来自另一个范围的原型
- 可以使用createRange选择一个空范围
- 我怎样才能创建一个函数expr;t继承词法范围
- JavaScript:将输入范围行为链接到另一个元素
- 试图检查表单中的值是否为一个设定范围内的数字
- 节点模块对象范围:在所有函数之间共享一个对象
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- 需要创建一个函数,将我自己创建的范围对象转换为字符串
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- ng-repeat=“(key, value)” 不能将 {{key}} 的值用作另一个指令的全局范围的一部分
- 不断提示用户一个数字,直到它落入某个范围
- 使用javascript将数字缩放为一个范围
- HTML5:如何创建一个“;范围输入类型“;具有动态值
- 在另一个范围中设置的间隔的Javascript clearInterval
- (文档).ready是一个全局范围
- 如何使用webkit浏览器在一个范围内选择一个节点
- RxJS的新手,范围不是一个函数
- 角度范围;一个特例
- 理解javascript这个范围 - 一个简单的骨干示例