DC.js - 空白数据点和直方图
DC.js - blank datapoints and histograms
我有一个包含 DC 行图和直方图(DC 条形图)的仪表板。我的数据集有 100 行和 10 个字段。六个字段具有全部 100 个数据点,而其他四个字段具有 95 个数据点和 5 个空白。我需要以一种对用户透明的方式在一个仪表板上显示所有字段。
对于行图表,我只是绘制空白并使用 .label() 属性将行名称设置为 'Unallocated' 空白处。
对于直方图,我被卡住了。我想显示一个标记为 'Unallocated' 的列,以及直方图的正常线性列。也可以从直方图中隐藏空白行。
我无法过滤直方图背后的维度,因为这会从交叉过滤变量 facts 中删除行,这意味着我看不到包含它们的六个字段的那些行。
标准的假组不起作用,因为对于直方图,当我们到达组时我们已经有了数字桶,所以没有 group空白键。
留给自己,DC 将空白解释为零并相应地对它们进行存储。我尝试限制维度,这是因为零桶减少了 5:
var dim = facts.dimension(function(d){ if (d[field]!='') { return Math.floor(+d[field]/binwidth)*binwidth; } });
但是这样做,5 行的计数只是随机(看起来)分布在其他桶中。当我在行图上单击 'Unallocated' 时,直方图随机显示 5 个桶,有时是两个桶,而我认为它们应该什么都不显示。
我可以数出空白行(并不总是 5 行)并且想知道我是否可以通过一个假组从零 bin 中减去它。但是我不知道如何添加键值对或调整 key=0;
的现有值
var grp = dim.group().reduceCount();
var grp2 = {all: function() { return grp.top(Infinity); }};
我无法通过 print_filter 或 console.log 看到足够多的结构来确定如何更改它。抱歉问题的长度。感谢任何帮助!
艾玛
将它们放入单独的列中会很棘手,因为线性 x 标度不能很好地适应 extra/NA/non-numerical 值。
我认为您必须切换到序数刻度才能将数字列和 non-numerical 列放在一起。有点乱,但可能。
让我们关注更简单的想法,只是跳过这些值。我认为您的方向是正确的。
问题是你的维度键函数并不总是return一个值:
var dim = facts.dimension(function(d){
if (d[field]!='') {
return Math.floor(+d[field]/binwidth)*binwidth;
}
});
else-branch 刚刚通过,JavaScript 函数的隐式 return 值为 undefined
。所以你最终得到了一些数字键,以及一些带有 undefined
键的行。我不确定 crossfilter 将如何处理这些行,但由于 documentation specifies that the key function must returned naturally-ordered values,我猜它会变得混乱。
相反,也许这个函数 return 的值远远超出直方图的范围?
var dim = facts.dimension(function(d){
if (d[field]!='') {
return Math.floor(+d[field]/binwidth)*binwidth;
}
else return -1000;
});
然后很容易创建fake group that screens out a particular value:
function remove_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
return source_group.all().filter(function(d) {
return bins.indexOf(d.key) === -1;
});
}
};
}
var grp = remove_bins(dim.group(), -1000);
我有一个包含 DC 行图和直方图(DC 条形图)的仪表板。我的数据集有 100 行和 10 个字段。六个字段具有全部 100 个数据点,而其他四个字段具有 95 个数据点和 5 个空白。我需要以一种对用户透明的方式在一个仪表板上显示所有字段。
对于行图表,我只是绘制空白并使用 .label() 属性将行名称设置为 'Unallocated' 空白处。
对于直方图,我被卡住了。我想显示一个标记为 'Unallocated' 的列,以及直方图的正常线性列。也可以从直方图中隐藏空白行。
我无法过滤直方图背后的维度,因为这会从交叉过滤变量 facts 中删除行,这意味着我看不到包含它们的六个字段的那些行。
标准的假组不起作用,因为对于直方图,当我们到达组时我们已经有了数字桶,所以没有 group空白键。
留给自己,DC 将空白解释为零并相应地对它们进行存储。我尝试限制维度,这是因为零桶减少了 5:
var dim = facts.dimension(function(d){ if (d[field]!='') { return Math.floor(+d[field]/binwidth)*binwidth; } });
但是这样做,5 行的计数只是随机(看起来)分布在其他桶中。当我在行图上单击 'Unallocated' 时,直方图随机显示 5 个桶,有时是两个桶,而我认为它们应该什么都不显示。
我可以数出空白行(并不总是 5 行)并且想知道我是否可以通过一个假组从零 bin 中减去它。但是我不知道如何添加键值对或调整 key=0;
的现有值 var grp = dim.group().reduceCount();
var grp2 = {all: function() { return grp.top(Infinity); }};
我无法通过 print_filter 或 console.log 看到足够多的结构来确定如何更改它。抱歉问题的长度。感谢任何帮助!
艾玛
将它们放入单独的列中会很棘手,因为线性 x 标度不能很好地适应 extra/NA/non-numerical 值。
我认为您必须切换到序数刻度才能将数字列和 non-numerical 列放在一起。有点乱,但可能。
让我们关注更简单的想法,只是跳过这些值。我认为您的方向是正确的。
问题是你的维度键函数并不总是return一个值:
var dim = facts.dimension(function(d){
if (d[field]!='') {
return Math.floor(+d[field]/binwidth)*binwidth;
}
});
else-branch 刚刚通过,JavaScript 函数的隐式 return 值为 undefined
。所以你最终得到了一些数字键,以及一些带有 undefined
键的行。我不确定 crossfilter 将如何处理这些行,但由于 documentation specifies that the key function must returned naturally-ordered values,我猜它会变得混乱。
相反,也许这个函数 return 的值远远超出直方图的范围?
var dim = facts.dimension(function(d){
if (d[field]!='') {
return Math.floor(+d[field]/binwidth)*binwidth;
}
else return -1000;
});
然后很容易创建fake group that screens out a particular value:
function remove_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
return source_group.all().filter(function(d) {
return bins.indexOf(d.key) === -1;
});
}
};
}
var grp = remove_bins(dim.group(), -1000);