【发布时间】:2014-03-11 11:46:48
【问题描述】:
我正在尝试使用 d3 显示来自多维数组的数据。使用下面的代码,浏览器中没有出现任何内容。检查元素显示每个数组中每个元素的文本都存在,但它们只是没有出现在页面上。但是,当我删除下面已注释的行时,我会得到下面的示例输出:
1,3,3,5,6,7
3,5,8,3,2,6
9,0,6,3,6,3
etc ...
如何修改代码以便显示如下内容:
1 3 3 5 6 7
3 5 8 3 2 6
etc...
代码:
var dataset = [
[1,3,3,5,6,7],
[3,5,8,3,2,6],
[9,0,6,3,6,3],
[3,4,4,5,6,8],
[3,4,5,2,1,8]
];
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
svg.append("g")
.selectAll("p")
.data(dataset)
.enter()
.append("p") // removing
.selectAll("text") // these
.data( function(d,i,j) { return d; } ) // lines
.enter() // text displays normally
.append("text")
.text( function(d,i,j) { return d; } )
.attr("x", function(d,i,j) { return (i * 20) + 40; })
.attr("y", function(d,i,j) { return (i * 20) + 40; })
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", textColour);
这是检查元素给出的不同数字数组:
【问题讨论】:
-
您将 SVG 元素
g和text与非 SVG 元素p混合。那是无效的;浏览器不知道如何呈现它。如果您的 viz 将是所有文本,那么坚持使用纯 html 元素。如果你需要使用 SVG(因为会有一些图形来),那就丢掉p。 -
我不确定您在寻找什么,但这基本上是典型的 nested selection 示例 -- jsfiddle.net/f4vAm/1
-
@meetamit 如果我将所有“p”替换为“text”,也会发生同样的情况。
-
@LarsKotthoff 谢谢!这正是我一直在寻找的,我哪里出错了?
-
我会添加一些解释的答案。
标签: javascript svg multidimensional-array d3.js