javascript - dc.js - 如何按唯一 ID 分组

标签 javascript d3.js dc.js crossfilter

我正在使用 dc.js 和 crossfilter 从 csv 创建 3 个行图。前两个是直截了当的,但第三个需要将维度设置为我的输入 csv 的多列,所以我重组了数据,以便对于该行的每个必需列(存在值),一个新的重复行使用在新列下输入的列值创建。见下文;

旧结构:
ID --- rowchart1 --- rowchart2 ---- rowchart3 ----- rowchart3 ----- rowchart3 -----
1
2
3

新结构:
ID --- rowchart1 --- rowchart2 ---- newRowchart3
1
2
2
2
3
3

一切正常,因为我能够将行图设置为这个新构建的列,但我无法让原始计数显示在其他两个列中。实际上,我在那些其他行图表中得到了重复计数。
有没有一种方法可以按唯一 ID 进行分组,这样它只计算这些唯一 ID 而不是每行计数?
非常感谢

最佳答案

请参阅:Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

您的示例是一个稍微简单的示例,因为您没有“rowchart3”值的数组,但该解决方案仍然适用于您。

答案包括一个演示如何手动管理图表中类别的 jsfiddle。你需要改变

function reduceAdd(p, v) {
   if (v.topics[0] === "") return p;    // skip empty values
   v.topics.forEach (function(val, idx) {
      p[val] = (p[val] || 0) + 1; //increment counts
   });
   return p;
}

类似于

function reduceAdd(p, v) {
   if(v.rowhart3a != "")
      p[v.rowchart3a] = (p[v.rowchart3a] || 0) + 1; //increment counts

   if(v.rowhart3b != "")
      p[v.rowchart3b] = (p[v.rowchart3b] || 0) + 1; //increment counts

   if(v.rowhart3c != "")
      p[v.rowchart3c] = (p[v.rowchart3c] || 0) + 1; //increment counts

   return p;
}

希望对您有所帮助。 -DJ

关于javascript - dc.js - 如何按唯一 ID 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791496/

相关文章:

javascript - 如何将函数合并到函数中

javascript - 如何使用 p5.js 清除部分缓冲图像

javascript - 使用 jQuery 创建边距以将元素定位在绝对定位元素下方

javascript - D3 按节点名称链接圈

javascript - 使用 javascript 动态添加 CSS

javascript - D3 径向条形图调整半径缩放

javascript - Dimple js修改散点形状

javascript - 隐藏 y 轴 dc.js 条形图上的所有文本

javascript - DC.JS 综合图表不显示最后值

d3.js - 图例标签和颜色更改为黑色 dc.js d3.js