d3.js代码中的引用错误

时间:2013-11-06 19:40:06

标签: d3.js

我是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>

1 个答案:

答案 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)。

在这种情况下,datanullerror为非空。

根据评论中的建议,尝试在本地托管文件(或托管您的Javascript代码的位置),它应该可以正常工作。

启动本地服务器

如果你有python,那么你可以启动一个本地网络服务器,它提供当前文件夹中的静态文件:

python -mSimpleHTTPServer

这将启动一个本地网络服务器,为localhost:8000的当前文件夹中的文件提供服务。然后,您可以将浏览器指向http://localhost:8000/the-dowloaded-file.html以加载包含此代码的网页。

请务必将文件引用从http://.../flare.json更改为flare.json