Javascript 访问d3中不同级别的嵌套列表
假设我有一个具有以下格式的列表:Javascript 访问d3中不同级别的嵌套列表,javascript,d3.js,Javascript,D3.js,假设我有一个具有以下格式的列表: dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]] 我想在每个嵌套列表的第二个元素中为每个单独的字符追加文本。我还希望每个字母的x位置由列表的第一个元素确定。因此,例如,a的x位置应该是10,对于s-11,d-12。。。对于j-20,对于k-21,等等 在到目前为止的代码中,我只显示了第一个字母,因为我没有遍历列表的正确部分: chartBody.selectAll("exampletext")
dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]]
我想在每个嵌套列表的第二个元素中为每个单独的字符追加文本。我还希望每个字母的x位置由列表的第一个元素确定。因此,例如,a
的x位置应该是10
,对于s
-11
,d
-12
。。。对于j
-20
,对于k
-21
,等等
在到目前为止的代码中,我只显示了第一个字母,因为我没有遍历列表的正确部分:
chartBody.selectAll("exampletext")
.data(dataset)
.enter()
.append("text")
.attr("class", "exampletext")
.text(function(d) {
for (var i=0; i <= d[1].length; i++)
{
return d[1][i];
}
})
.attr("x", function(d) {
for (var i=0; i <= d[1].length; i++)
{
return xScale(+d[0]) + i;
}
})
.attr("y", h/2);
chartBody.selectAll(“exampletext”)
.数据(数据集)
.输入()
.append(“文本”)
.attr(“类”、“示例文本”)
.文本(功能(d){
对于(var i=0;i我不知道您为什么需要它(读取该输出非常困难),但它在这里:
重要的变化是在输入d3之前建立字母和位置列表:
var dataset, h, i, letter, pair, r, viewport, xScale, _i, _j, _len, _len1, _ref;
dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]];
r = [];
i = 0;
/*loop each pair, push into a new array */
for (_i = 0, _len = dataset.length; _i < _len; _i++) {
pair = dataset[_i];
i = 0;
_ref = pair[1];
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
letter = _ref[_j];
r.push([+pair[0] + i, letter]);
i++;
}
}
我在这里制作了一个可读性稍高的版本:。如果您想增加字母之间的差异,请查看d3颜色函数,如:d3.scale.category10()
:d[2]是“x”属性函数中的第三个元素,您是指吗(var i=0;我是的,刚刚修复了它,代码仍然工作。您的文本函数和x属性函数将在每个列表项[“10”,“asdf”]中运行一次。它将有一个文本属性和一个x属性。您想查看“a-10 s-11 d-12 f-13”的文本吗对于文本?x的期望值是多少?或者您正在寻找给定这三个节点的10个文本/x属性?当数组不大时,这个答案很有效,就像您的完美示例中那样…但是当字符串特别大时,生成额外的数组似乎计算量太大,这意味着100-1000个字符。当将此代码实现到我的代码中,即使r显示在控制台上(1289个字符=1289个数组),字母也不会显示但在此之前我不知道coffeescript:/谢谢!当然,但想想这些东西在内存中有多小,1200个数组位置中的1200个字符在内存方面并不是一个大问题;另外,如果你需要1200个字符在屏幕上,那么,为什么你需要那么多呢?如果你用d3呈现一页文本,这是一个糟糕的想法。我正在尝试b构建一个微型基因组浏览器,以可视化DNA序列。它不是一个可以查看整个基因组甚至染色体的合法浏览器,它设计为一次查看一个基因。一个基因可以是1000到10000个碱基对(字符)很长。我希望用户能够放大,并看到每个碱基对的位置。事实上,我的数组是这样的:[[“50376619”,“aaaacaacgaaggaagaac…”,[“50384973”,“agataagatagattaa…”,…]
我想我是想把问题简化一点。很抱歉,它成功了!我忘了在我的x属性上添加xScale。做得好,非常感谢!这是D3的一个有趣的应用程序,完成后你应该将它发布到github上。
dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]]
r = []
i = 0
#loop each pair, push into a new array
for pair in dataset
i = 0
for letter in pair[1]
r.push([+(pair[0]) + i, letter])
i++