【发布时间】:2014-05-29 00:04:36
【问题描述】:
我正在尝试根据用户选择(鼠标悬停在 d3 图上)创建动态 html 表。到目前为止,我非常幸运,我已经能够修改其他人的代码 sn-ps(主要来自http://jsfiddle.net/U4CGz/7/)以达到这一点。
我找到了其他包含这些片段的链接,但我无法将它们组合成一个工作脚本(由于声誉低,链接未列出)
我的目标..
- 使用鼠标悬停在 d3 图形上的索引值
- 使用站点 ID 填充第一列(站点数量并不总是相同)
- 使用图表中的相同颜色填充第二列与相应的放电值
- 根据查找填充第三列... StationId : StationName
- 根据下游预定顺序(非字母顺序)对结果进行排序
部分数据集如下
var dataset = [{
'date': '201405221630',
'10300200': 199,
'10300000': 239
}, {
'date': '201405221645',
'10300200': 199,
'10300000': 239
}, {
'date': '201405221700',
'10300200': 197,
'10300000': 240
}, ];
mousemove 功能似乎有效,而 updateTable 功能无效
function mousemove() {
var x0 = x_main.invert(d3.mouse(this)[0]),
i = bisectDate(dataset, x0, 1),
d0 = dataset[i - 1].date,
d1 = dataset[i].date,
c = x0 - d0 > d1 - x0 ? [d1, i] : [d0, i - 1];
//console.log(dataset[i]);
circles.attr('transform', function (d) {
return 'translate(' + x_main(c[0]) + ',' + y_main(d.values[c[1]].value) + ')'
});
updateTable(c)
}
function updateTable(dateIndex) {
//console.log(dateValue)
d3.select("#th-date").text("Date: " + dateIndex[0]);
//console.log(dataset[dateValue[1]])
//console.log(dataset);
var tbody = d3.select("discharge-table").append("tbody");
var rows = tbody.selectAll("tr")
.data(dataset)
.enter()
.append("tr");
var cells = rows.selectAll("td")
.data(function (row) {
return dataset.map(function (d) {
return {
name: d,
value: d[name]
};
});
})
.enter()
.append("td")
.text(function (d) {
return d.value;
});
}
我当前状态的代码(在一定程度上有效)位于http://jsfiddle.net/cjustin7/DCCe4/#base
正如您在上面的代码或我的 JSFiddle 中看到的,我什至还没有开始为我的第 4 个和第 5 个目标设置结构。我对 html、css、javascript 和 d3 非常陌生。如果有人指导或向我展示一个工作示例或关于我做错了什么的建议,我将不胜感激。
【问题讨论】:
-
您的数据集不包含站号和名称
-
@Justin 正如 jhyap 提到的,您的数据集似乎没有 StationID 和 name 字段。您能否澄清数据集中的不同字段代表什么。目前,仅清楚数据集中的每个条目都有一个“日期”条目。每个数据点中的其他 2 个字段(及其值)代表什么?
-
抱歉给您带来了困惑...有时您与您正在做的事情有点太接近了。每条记录都有一个带有关联日期值的日期字段,后跟与 n 个排放值关联的 n 个站点。在上面的数据集中有 3 条记录,每条记录都有一个日期和 2 个站点/放电数据对。
-
@JustinMayers 我已根据您的回复编辑了代码。让我知道,以防它没有提供您期望的输出。
-
@jithinpt 谢谢。您的代码建议已考虑到上面列出的 #2 和 #3 目标的一部分。除了手头的代码 sn-p 之外,我还能够找出 #4 和 #5 目标。可以帮助我完成#3 目标的最后一部分吗?为了清楚地重申它。我希望仅使第二列中的文本(放电值)与图表上相应线的颜色相匹配。我试图将
.style('color', function (d) {return colour(d.name);添加到单元格变量中,但它可以预见地适用于整个身体,在这种情况下,它会应用看似随机的颜色。再次感谢。
标签: javascript html json d3.js