使用d3 js在phant中绘制json数据

时间:2017-01-23 06:37:17

标签: javascript json d3.js

我正在尝试使用d3.js来显示sparkfun cloud(物联网云)中存储的数据。 There is example using google chart for visualizing sparkfun cloud,使用以下脚本:

<!DOCTYPE html>
<html>
  <head>
    <!-- EXTERNAL LIBS-->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://www.google.com/jsapi"></script>

    <!-- EXAMPLE SCRIPT -->
    <script>

      // onload callback
      function drawChart() {

        var public_key = 'dZ4EVmE8yGCRGx5XRX1W';

        // JSONP request
        var jsonData = $.ajax({
          url: 'https://data.sparkfun.com/output/' + public_key + '.json',
          data: {page: 1},
          dataType: 'jsonp',
        }).done(function (results) {

          var data = new google.visualization.DataTable();

          data.addColumn('datetime', 'Time');
          data.addColumn('number', 'Temp');
          data.addColumn('number', 'Wind Speed MPH');

          $.each(results, function (i, row) {
            data.addRow([
              (new Date(row.timestamp)),
              parseFloat(row.tempf),
              parseFloat(row.windspeedmph)
            ]);
          });

          var chart = new google.visualization.LineChart($('#chart').get(0));

          chart.draw(data, {
            title: 'Wimp Weather Station'
          });

        });

      }

      // load chart lib
      google.load('visualization', '1', {
        packages: ['corechart']
      });

      // call drawChart once google charts is loaded
      google.setOnLoadCallback(drawChart);

    </script>

  </head>
  <body>
    <div id="chart" style="width: 100%;"></div>
  </body>
</html>

我希望使用d3.js来绘制数据,而不是使用谷歌图表,因为它提供了更大的灵活性(我很惊讶需要花费多少精力来使用谷歌图表重新调整图表的大小)。为此,可能需要使用d3.js json提取器从网站获取数据。我在下面根据问题12尝试过:

var data1;
var url = "https://data.sparkfun.com/output/dZ4EVmE8yGCRGx5XRX1W.json"

d3.json(url, function (json) {
         if (error) return console.warn(error);
     //data1 = json;
     data1=json;
     consol.log(data1)
             //code here
                     })

它不起作用。我可能有一些关键信息丢失,因为我是d3.js和java的新手。请给我一个指示,以便我可以关注。谢谢!

1 个答案:

答案 0 :(得分:1)

由于你试图捕获error,你必须将错误作为匿名函数中的第一个参数传递:

d3.json(url, function (error, json) {
    //first argument -----^
    if (error) return console.warn(error);
    data1=json;
    consol.log(data1)
    //code here
 })

请注意:在d3.json中,“error”是第一个参数,而不是第二个。

更简单的替代方法是简单地删除“错误”:

d3.json(url, function (json) {
    data1=json;
    consol.log(data1)
    //code here
 })