D3图表未加载..显示空白页面D3.Js和python

时间:2014-12-24 22:18:34

标签: python json d3.js

我是D3js和python的新手。我正在尝试从postgresql加载数据并将JSON传递给D3js并绘制折线图。我收到错误

  <anonymous> hello:61
  d3.json/<() d3.v2.js:2950
  ready() d3.v2.js:2940
  d3.xhr/req.onreadystatechange().

以下是我的D3 js电话。

d3.json ("http://104.131.191.213/books/",function (error,data) {
if (error) return console.error(error);
console.log(data);
data.forEach(function(d) {
d.year = parseDate(d.year.toString);
d.buys = +d.buys;
});

我的解析函数如下:

var parseDate = d3.time.format("%y").parse;

JSON:

{
"data": [
{
  "buys": 5841, 
  "year": "1986"
}, 
{
  "buys": 54, 
  "year": "1954"
}, 
{
  "buys": 176, 
  "year": "1967"
}, 
{
  "buys": 9389, 
  "year": "1991"
}, 

我的完整代码如下:

<!DOCTYPE html>
meta charset="utf-8">
<title> flask+D3 hello </title>
<style>

body {
font: 10px sans-serif;
}

.axis path,
.axis line {
 fill: none;
 stroke: #000;
 shape-rendering: crispEdges;
 }
.x.axis path {
display: none;
}

.line {
fill: none;
stroke: steelblue;
stroke-width: 1.5px;
}

</style>
<body>
<script type="text/javascript"  src="http://mbostock.github.com/d3/d3.js"></script>
<script>

var margin = {top: 20, right: 20, bottom: 30, left: 50},
  width = 960 - margin.left - margin.right,
  height = 500 - margin.top - margin.bottom;

var parseDate = d3.time.format("%y").parse;

var x = d3.time.scale()
 .range([0, width]);

var y = d3.scale.linear()
 .range([height, 0]);

var xAxis = d3.svg.axis()
 .scale(x)
 .orient("bottom");

var yAxis = d3.svg.axis()
 .scale(y)
 .orient("left");

var line = d3.svg.line()
 .x(function(d) { return x(d.year); })
 .y(function(d) { return y(d.buys); });

var svg=d3.select ("body").append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
    d3.json ("http://104.131.191.213/books/",function (error,data) {
    if (error) return console.error(error);
      console.log(data);
      data.forEach(function(d) {
      d.year = parseDate(d.year.toString);
      d.buys = +d.buys;
    });
   x.domain(d3.extent(data, function(d) { return d.year; }));
   y.domain(d3.extent(data, function(d) { return d.buys; }));

   svg.append("g")
     .attr("class", "x axis")
     .attr("transform", "translate(0, " + height + ")")
     .call(xAxis);

   svg.append("g")
     .attr("class", "y axis")
     .call(yAxis)
     .append("text")
     .attr("transform", "rotate(-90)")
     .attr("y",6)
     .attr("dy", ".71em")
     .style("text-anchor", "end")
     .text("Price ($)");

   svg.append("path")
     .datum(data)
     .attr("class", "line")
     .attr("d", line);

      });

    </script>
我可以知道我哪里错了吗?

1 个答案:

答案 0 :(得分:0)

来自d3.parseDate Error cannot read property 'forEach' of undefined

  

d3.json(url [,callback])

     

使用mime在指定的url处创建对JSON文件的请求   输入“application / json”。如果指定了回调,则请求为   立即发布了GET方法,并将回调   加载文件或请求失败时异步调用;   使用两个参数调用回调:错误(如果有)和   解析了JSON。 如果发生错误,则解析的JSON未定义。如果不是   指定了回调,可以使用返回的请求发出   xhr.get或类似,并使用xhr.on。

处理

所以打印错误并仔细检查网址。