如何在同一HTML页面中显示两个图表

时间:2019-05-06 08:22:28

标签: javascript canvas smoothie.js

我正在一个项目中,我应该显示两种图表:

  • 实时图表,为此我正在使用smoothie.js lib。
  • 具有缩放选项的普通图表,为此我正在使用canvas lib。

如Smoothie.js下面的代码所示,在body标签上使用“ onload”:

  <!DOCTYPE html>
  <meta charset="utf-8">
  <html>
        <head>
              <title>Pression en temps réel</title>
              <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

               <script type="text/javascript" src="smoothie.js"></script>
               <script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>

               <script type="text/javascript">

               window.bufferX = [];

               setInterval(function () {

            if( typeof lastid == 'undefined' ) {
                $.get( "../be.php/lastid_1", function( dataA ) {
                 lastid = dataA[0].id_x+1;  
                })
            }
            else {
                $.get( "../be.php/1&"+lastid, function( dataB ) {
                     var i =0;
                     var j=0;

                     if( typeof counter == 'undefined' ) {
                            counter = 0;
                        }
                    if( typeof pck_prev == 'undefined' ) {
                                pck_prev = -1;
                            }

                    lastid = dataB[0].last_id;

                     for(i=0;i<dataB.length;i++) {

                        for(j=0;j<dataB[i].data.length;j++) {
                            if(dataB[i].data[j] !== "" && dataB[i].data[j] !== 0 && typeof  dataB[i].data[j] !== 'undefined' && pck_prev !== dataB[i].pck) {
                                window.bufferX.push(dataB[i].data[j]);
                            }
                        }
                        pck_prev = dataB[i].pck;
                     }
                     if(typeof window.bufferX[counter] == 'undefined') {
                       data_p.append(new Date().getTime(), window.bufferX[counter-1]);
                     }
                })
            } 
        },3000);



          var data_p = new TimeSeries();
          setInterval(function() {

           if(window.bufferX.length>50 && counter <window.bufferX.length)
                                 {

                                     if( typeof counter == 'undefined' ) {
                                        counter = 0;
                                    }

                                    else {
                                            data_p.append(new Date().getTime(), window.bufferX[counter]);
                                            counter++;
                                    } 
                                   }
          }, 250);       

  function createTimeline() {
    var chart = new SmoothieChart({responsive: true});
    chart.addTimeSeries(data_p, { strokeStyle: 'rgba(0, 255, 0, 1)', fillStyle: 'rgba(0, 255, 0, 0.2)', lineWidth: 4 });
    chart.streamTo(document.getElementById("chart"), 250);
  }

</script>
<script type="text/javascript">
      window.onload = function () {

        var chart = new CanvasJS.Chart("chartContainer",
        {
          zoomEnabled: true, 
          title:{
            text: "Try Zooming And Panning" 
          },
          axisY:{
            includeZero: false
          },
          data: data,  // random generator below

       });

        chart.render();
      }

        var limit = 1000;    //increase number of dataPoints by increasing this
        var y = 0;
        var data = []; var dataSeries = { type: "line" };
        var dataPoints = [];
        for (var i = 0; i < limit; i += 1) {
            y += (Math.random() * 10 - 5);
             dataPoints.push({
              x: i - limit / 2,
              y: y                
               });
            }
         dataSeries.dataPoints = dataPoints;
         data.push(dataSeries);               

       </script>
       </head>
  <body onload="createTimeline()">

           <canvas id="chart" style="width:100%; height:700px;"></canvas>
           <div id="chartContainer" style="height: 700px; width: 100%;"> 
                   </div>
   </body>
  </html>

问题是,如果我从body标签中删除onload,我将仅获得画布图表,而如果允许的话,我将仅获得实时图表。

我希望两个图表都显示在页面上。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

window.onload<body onload="yourfunction();">是使用同一事件的不同方式,而您正在使用这两种方式都会导致问题。解决此问题的最简单方法是,您应该在body标签的window.onloadonload中的一个事件中同时编写实现。 找到更新的小提琴here

您可以找到两个图表同时可见。