我试图将我的堆积条形图修改为仅在我的数据文件中迭代(堆叠)第1列和第2列,并忽略将在图表中用于其他目的的第3列。我发现的所有示例都使用此函数来遍历所有列:
function type(d, i, columns) {
for (i = 1, t = 0; i < columns.length; ++i) t += d[columns[i]] = +d[columns[i]];
d.total = t;
return d
}
我的CSV数据文件如下:
SL,Outpatient,Inpatient,Trend,Threshold
SL 1, 42, 99, -1, 100
SL 2, 23, 58, +1, 100
SL 3, 15, 74, 0, 100
SL 4, 99, 23, +1, 100
SL 5, 33, 86, +1, 100
SL 6, 38, 20, 0, 100
我已经尝试修改上述功能,几乎可以用任何方式来完成工作,但没有运气。我是一名ux设计师,所以脚本不是我最强的东西。我只想堆叠Outpatient和Inpatient列。我的第一个尝试是这样的:
function type(d, i, columns) {
for (i = 1, t = 0; i < columns.length - 2; ++i) t += d[columns[i]] = +d[columns[i]];
d.total = t;
return d
唉,那不行。任何有关此问题或方向的帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您共享的行函数(称为type
)未删除任何内容。它只是选择不同的列添加到total
属性。
就个人而言,我按原样加载CSV,而不删除任何内容,并且我创建另一个数组,逐列过滤原始数据。另一个选择是定义堆栈生成器中的列。在两种方式中,您都可以保留所有原始列,以防您需要它们。它几乎不会明智地删除信息:只选择要使用的信息。
但是,如果您想使用行功能,请执行以下操作:
function type(d, i, columns) {
for (var j = 0; j < columns.length; j++) {
if (j > 1) delete d[columns[j]]
}
return d;
}
以下是包含数据的演示,请查看控制台:
var csv = `SL,Outpatient,Inpatient,Trend,Threshold
SL 1, 42, 99, -1, 100
SL 2, 23, 58, +1, 100
SL 3, 15, 74, 0, 100
SL 4, 99, 23, +1, 100
SL 5, 33, 86, +1, 100
SL 6, 38, 20, 0, 100`;
var data = d3.csvParse(csv, type);
function type(d, i, columns) {
for (var j = 0; j < columns.length; j++) {
if (j > 1) delete d[columns[j]]
}
return d;
}
console.log(data)
&#13;
<script src="https://d3js.org/d3.v4.min.js"></script>
&#13;
PS:我相信通过&#34;第1列和第2列数据&#34; ,您指的是&#34;门诊病人&#34;和&#34;住院病人&#34;。在这种情况下,请if (j > 2)
。