1

我是 javascript 和 d3 的新手。我正在运行网站上的图形代码之一,但出现以下错误:

未捕获的类型错误:无法读取 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 u 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>
4

1 回答 1

1

在第 44 行附近,index.html您可以看到问题的可能根源:

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

在这种情况下,dataisnull和 theerror是非空的。

正如评论中所建议的那样,尝试在本地(或您托管 Javascript 代码的地方)托管文件,它应该可以工作。

启动本地服务器

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

python -mSimpleHTTPServer

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

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

于 2013-11-06T22:48:11.257 回答