2016-02-18 60 views
0

我试图在同一页上获得2个完全不同的d3图表(2个折线图,但完全不同的数据 - 一个有几行和负数据,其他有一行正数据) 。在同一页上的2个完全不同的d3图表

现在,我只得到第一个生成并正确显示在HTML页面上,第二个图表根本不显示(甚至没有生成svg容器)。

这里是我的代码:

(function() { 
     // Get the data 
     d3.json("../assets/js/json/temperature.json", function(data) { 


      // Set the dimensions of the canvas/graph 
      var margin = {top: 30, right: 20, bottom: 30, left: 25}, 
       width = 600 - margin.left - margin.right, 
       height = 270 - margin.top - margin.bottom; 

      // Parse the date/time 
      var parseDate = d3.time.format("%Y-%m-%d %H:%M:%S").parse; 

      // Set the ranges 
      var x = d3.time.scale().range([0, width]); 
      var y = d3.scale.linear().range([height, 0]); 

      // Define the axes 
      var xAxis = d3.svg.axis().scale(x) 
       .orient("bottom").ticks(5); 

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

      // Define the line 
      var valueline = d3.svg.line() 
       .x(function(d) { return x(d.temps); }) 
       .y(function(d) { return y(d.temperature); }); 

      // prepare data 
      data.forEach(function(d) { 
       d.temps = parseDate(d.temps); 
       d.temperature = +d.temperature; 
      }); 

      // Adds the svg canvas 
      var svg = d3.select("#graphTemp") 
       .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 + ")"); 

       // Scale the range of the data on domain 
       x.domain(d3.extent(data, function(d) { return d.temps; })); 
       y.domain([0, d3.max(data, function(d) { return d.temperature; })]); 

       // Add the valueline path. 
       svg.append("path") 
        .attr("class", "line") 
        .attr("d", valueline(data)); 

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

       // Add the Y Axis 
       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("Temperatures"); 

     }); 
    })(); 

    (function(){ 

    // loads the data and loads it into chart - main function 
    d3.json("../assets/js/json/maitrise.json", function(data) { 

    var m = {top: 20, right: 5, bottom: 30, left: 40}, 
       w = 70 - m.left - m.right, 
       h = 30 - m.top - m.bottom; 


    var x = d3.scale.linear().domain([0, data.length]).range([0 + m.left, w - m.right]); 

    var y = d3.scale.linear() 
       .rangeRound([h, 0]); 

    var line = d3.svg.line() 
       .interpolate("cardinal") 
       .x(function(d,i) { return x(i); }) 
       .y(function (d) { return y(d.value); }); 

    var color = d3.scale.ordinal() 
       .range(["#28c6af","#ffd837","#e6443c","#9c8305","#d3c47c"]); 

    var svg2 = d3.select("#maitrisee").append("svg") 
       .attr("width", w + m.left + m.right) 
       .attr("height", h + m.top + m.bottom) 
       .append("g") 
       .attr("transform", "translate(" + m.left + "," + m.top + ")"); 

    // prep axis variables 
    var xAxis2 = d3.svg.axis() 
     .scale(x) 
     .orient("bottom"); 

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


     //console.log("Inital Data", data); 

     var labelVar = 'id'; //A 
     var varNames = d3.keys(data[0]) 
      .filter(function (key) { return key !== labelVar;}); //B 

     color.domain(varNames); //C 

     var seriesData = varNames.map(function (name) { //D 
     return { 
      name: name, 
      values: data.map(function (d) { 
      return {name: name, label: d[labelVar], value: +d[name]}; 
      }) 
     }; 
     }); 
     console.log("seriesData", seriesData); 

     y.domain([ 
     d3.min(seriesData, function (c) { 
      return d3.min(c.values, function (d) { return d.value; }); 
     }), 
     d3.max(seriesData, function (c) { 
      return d3.max(c.values, function (d) { return d.value; }); 
     }) 
     ]); 

    var series = svg2.selectAll(".series") 
     .data(seriesData) 
     .enter().append("g") 
     .attr("class", function (d) { return d.name; }); 

    series.append("path") 
     .attr("class", "line") 
     .attr("d", function (d) { return line(d.values); }) 
     .style("stroke", function (d) { return color(d.name); }) 
     .style("stroke-width", "2px") 
     .style("fill", "none"); 

    }); 

    })(); 
+0

你是否在你的html #maitrisee中有这个id的div,并且你是否在控制台中看到了日志.'console.log(“seriesData”,seriesData);' – Cyril

+0

是的!我在serialData的控制台中看到日志,并且我确实有#maitrisee的div。 – user1499369

+0

我很喜欢,但我没有足够的名声来聊天。 – user1499369

回答

0

你的第二个SVG的变种h是-20,一个负值。所以,你的y范围从-20到0.

除此之外,高度只是-20 + 50 = 30像素,而你正在向下平移g 20个像素。那是对的吗?

0

好的,我发现错误来自哪里。在HTML页面中间有一段javascript停止了d3,从而在页面中进一步生成第二个图形。

感谢您的帮助!

相关问题