获取d3.js中每列的总和
Get sum total for each column in d3.js
我期待着以动态方式使用d3.js获得每列的总和。请查找示例-
键|value1|value2|value3|value4-----+--------+--------+--------+--------迈克|1|3|5|7-----+--------+--------+--------+--------mila|2|4|6|8-----+--------+--------+--------+--------minda | 9 | 11 | 13 | 15
这里,value1的总和为12,value2为18。我需要以一种动态的方式计算每一列的总和。
我不知道你是如何加载数据的,但这里有一种方法可以做到。
var data = [
{ key: "mike", value1: 1, value2: 3, value3: 5, value4: 7},
{ key: "mila", value1: 2, value2: 4, value3: 6, value4: 8},
{ key: "minda", value1: 3, value2: 5, value3: 7, value4: 9},
{ key: "mandy", value1: 4, value2: 6, value3: 9, value4: 10}
];
var cols = d3.keys(data[0]),
table = d3.select("#vis").append("table"),
totals = {};
data.forEach(function(d) {
cols.forEach(function(k) {
if (k !== "key") {
if (k in totals) {
totals[k] += d[k];
} else {
totals[k] = d[k];
}
}
});
});
totals['key'] = 'totals';
data.push(totals);
table.append("thead").append("tr").selectAll("th")
.data(cols)
.enter().append("th")
.html(function(d) {
return d;
});
var rows = table.append("tbody").selectAll("tr")
.data(data)
.enter().append("tr")
.html(function(d) {
html = "";
cols.forEach(function(k) {
html += "<td>" + d[k] + "</td>";
});
return html;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div id="vis"></div>
实际上非常简单,从data
(存储在cols
中)中获取列名,对于data
中的每一行,循环这些列名,将该列中的值相加,并将它们存储在一个新变量中(本例中为totals
)。
为了显示它,我只是创建一个totals
附加到data
的表,这样它就创建了一个包含总计的新行
相关文章:
- 如何在d3.js中返回路径的y坐标
- 有条件更新d3.js力图中节点的最佳方法
- 使用D3.js计算带有字母间距的文本长度
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- HTML5FileReader输出到D3.js图表
- D3.js生成有效的SVG,但不显示任何内容
- d3.js:限制画笔的大小
- d3.js用按钮更新条形图工具提示
- 如何为d3.js图表输出组织/嵌套数据
- d3-js快速事件调用问题
- D3.JS向rect添加缩放和列表项
- d3.js圆的半径是否可以由样式属性指定
- 如何在d3.js中自定义事件侦听器
- 在新窗口上使用d3.js
- 如何用d3.js绘制折线图
- 使用dc.js、d3.js和crossfilter引用错误
- D3.js剪辑路径截断了我的图的边缘
- D3.js和坐标系