我是javascript以及d3的新手。我正在运行网站上的一个图形代码,但我收到以下错误:
未捕获的TypeError:无法读取属性' children' null d3.v3.min.js:2 gu d3.v3.min.js:2 n d3.v3.min.js:4 e d3.v3.min.js:4 e d3.v3.min.js:4 (匿名函数)index.html:44 (匿名函数)d3.v3.min.js:1 t d3.v3.min.js:1 你d3.v3.min.js:1
这里是整个代码:
<!DOCTYPE html>
<meta charset="utf-8">
<style>
path {
stroke: #fff;
fill-rule: evenodd;
}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var width = 960,
height = 700,
radius = Math.min(width, height) / 2;
var x = d3.scale.linear()
.range([0, 2 * Math.PI]);
var y = d3.scale.sqrt()
.range([0, radius]);
var color = d3.scale.category20c();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ")");
var partition = d3.layout.partition()
.value(function(d) { return d.size; });
var arc = d3.svg.arc()
.startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
.endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
.innerRadius(function(d) { return Math.max(0, y(d.y)); })
.outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });
d3.json("http://bl.ocks.org/d/4063550/flare.json", function(root) {
var path = svg.selectAll("path")
.data(partition.nodes(root))
.enter().append("path")
.attr("d", arc)
.style("fill", function(d) { return color((d.children ? d : d.parent).name); })
.on("click", click);
function click(d) {
path.transition()
.duration(750)
.attrTween("d", arcTween(d));
}
});
d3.select(self.frameElement).style("height", height + "px");
// Interpolate the scales!
function arcTween(d) {
var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
yd = d3.interpolate(y.domain(), [d.y, 1]),
yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
return function(d, i) {
return i
? function(t) { return arc(d); }
: function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };
};
}
</script>
答案 0 :(得分:1)
在index.html
的第44行附近,您可以看到问题的可能来源:
d3.json("http://bl.ocks.org/d/4063550/flare.json", function(root) {
var path = svg.selectAll("path")
.data(partition.nodes(root))
问题是您的域中不存在文件http://bl.ocks.org/d/4063550/flare.json
(我猜,这是localhost
)。
在这种情况下,data
为null
,error
为非空。
根据评论中的建议,尝试在本地托管文件(或托管您的Javascript代码的位置),它应该可以正常工作。
启动本地服务器
如果你有python,那么你可以启动一个本地网络服务器,它提供当前文件夹中的静态文件:
python -mSimpleHTTPServer
这将启动一个本地网络服务器,为localhost:8000
的当前文件夹中的文件提供服务。然后,您可以将浏览器指向http://localhost:8000/the-dowloaded-file.html
以加载包含此代码的网页。
请务必将文件引用从http://.../flare.json
更改为flare.json
。