簡體   English   中英

使用chart.js刷新圖表圖像

[英]Refreshing the image of a chart using chart.js

我正在做一個顯示日常個人工作數據的應用程序。 我將數據存儲在名為“ dailyTimePerProjectPerWeek”的數組中,現在我定義了3周的數據。 我在html中放置了兩個按鈕,“上周”和“下周”,以在各周之間導航。 首次加載頁面時,它會顯示與上述數組的最高索引相對應的最近一周。 問題在於,它使我無法可視化數據,就像我創建了多個圖表一樣。 如何正確刷新圖表的圖像? 有我的html代碼:

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title>Charts4DailyProgress</title>



      <link rel="stylesheet" href="css/style.css">


</head>

<body>


<body>
<h1>Weekly Time per Project</h1>
<div id="canvas-container">
<canvas id="ctx" width="1000"></canvas>
<button type="button" onclick="decrementWeek()">Previous Week</button>
<button type="button" onclick="incrementWeek()">Next Week</button>

  </div>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
  <script  src="js/index.js"></script>

</body>


</html>

有我的JavaScript代碼:

var dailyTimePerProjectPerWeek =[];
dailyTimePerProjectPerWeek[0] = {
      labels: ['M', 'TU','W','TH','F','SA','SU'], // responsible for how many bars are gonna show on the chart
      // create 12 datasets, since we have 12 items
      // data[0] = labels[0] (data for first bar - 'Standing costs') | data[1] = labels[1] (data for second bar - 'Running costs')
      // put 0, if there is no data for the particular bar
      datasets: [{
         label: 'Master Project. Second Part',
         data: [300, 480, 360,180, 240, 300,480],
         backgroundColor: '#D4AF37'
      }, {
         label: 'Guild Ideas - Learning Angular',
         data: [60, 0, 240, 180, 120, 0, 60],
         backgroundColor: '#C0C0C0'
      }, {
         label: 'Charts For Daily Progress',
         data: [60, 180, 120, 180, 120, 120, 0],
         backgroundColor: '#133a7c'
      }, {
         label: 'Project Manager',
         data: [120, 180, 120, 120, 0],
         backgroundColor: '#109618'
      }, {
         label: 'TOOYS',
         data: [0, 180, 120, 0, 120, 0,0],
         backgroundColor: '#990099'
      }, {
         label: 'Web Pc Explorer',
         data: [0, 0, 120, 180, 0, 120, 0],
         backgroundColor: '#54161F'
      }, {
         label: 'Mind Maps Program',
         data: [0, 0, 180, 180, 0, 0, 0],
         backgroundColor: '#708238'
      }, {
         label: 'Chain System',
         data: [0, 0, 180, 0, 0, 0],
         backgroundColor: '#E86100'
      }, {
         label: 'Code Generator',
         data: [60, 0, 0, 0, 0, 0],
         backgroundColor: '#F81894'
      }, {
         label: 'Electronic Brain',
         data: [0, 0, 0, 0, 0, 0,240],
         backgroundColor: '#6cc4ee'
      }]
   }

dailyTimePerProjectPerWeek[1] = {
      labels: ['M', 'TU','W','TH','F','SA','SU'], // responsible for how many bars are gonna show on the chart
      // create 12 datasets, since we have 12 items
      // data[0] = labels[0] (data for first bar - 'Standing costs') | data[1] = labels[1] (data for second bar - 'Running costs')
      // put 0, if there is no data for the particular bar
      datasets: [{
         label: 'Master Project. Second Part',
         data: [0, 480, 360,180, 240, 300,480],
         backgroundColor: '#D4AF37'
      }, {
         label: 'Guild Ideas - Learning Angular',
         data: [0, 0, 240, 180, 120, 0, 60],
         backgroundColor: '#C0C0C0'
      }, {
         label: 'Charts For Daily Progress',
         data: [0, 180, 120, 180, 120, 120, 0],
         backgroundColor: '#133a7c'
      }, {
         label: 'Project Manager',
         data: [0, 180, 120, 120, 0],
         backgroundColor: '#109618'
      }, {
         label: 'TOOYS',
         data: [0, 180, 120, 0, 120, 0,0],
         backgroundColor: '#990099'
      }, {
         label: 'Web Pc Explorer',
         data: [0, 0, 120, 180, 0, 120, 0],
         backgroundColor: '#54161F'
      }, {
         label: 'Mind Maps Program',
         data: [0, 0, 180, 180, 0, 0, 0],
         backgroundColor: '#708238'
      }, {
         label: 'Chain System',
         data: [0, 0, 180, 0, 0, 0],
         backgroundColor: '#E86100'
      }, {
         label: 'Code Generator',
         data: [0, 0, 0, 0, 0, 0],
         backgroundColor: '#F81894'
      }, {
         label: 'Electronic Brain',
         data: [0, 0, 0, 0, 0, 0,240],
         backgroundColor: '#6cc4ee'
      }]
   }
dailyTimePerProjectPerWeek[2] = {
      labels: ['M', 'TU','W','TH','F','SA','SU'], // responsible for how many bars are gonna show on the chart
      // create 12 datasets, since we have 12 items
      // data[0] = labels[0] (data for first bar - 'Standing costs') | data[1] = labels[1] (data for second bar - 'Running costs')
      // put 0, if there is no data for the particular bar
      datasets: [{
         label: 'Master Project. Second Part',
         data: [300, 480, 360,180, 240, 300,0],
         backgroundColor: '#D4AF37'
      }, {
         label: 'Guild Ideas - Learning Angular',
         data: [60, 0, 240, 180, 120, 0, 0],
         backgroundColor: '#C0C0C0'
      }, {
         label: 'Charts For Daily Progress',
         data: [60, 180, 120, 180, 120, 120, 0],
         backgroundColor: '#133a7c'
      }, {
         label: 'Project Manager',
         data: [120, 180, 120, 120, 0],
         backgroundColor: '#109618'
      }, {
         label: 'TOOYS',
         data: [0, 180, 120, 0, 120, 0,0],
         backgroundColor: '#990099'
      }, {
         label: 'Web Pc Explorer',
         data: [0, 0, 120, 180, 0, 120, 0],
         backgroundColor: '#54161F'
      }, {
         label: 'Mind Maps Program',
         data: [0, 0, 180, 180, 0, 0, 0],
         backgroundColor: '#708238'
      }, {
         label: 'Chain System',
         data: [0, 0, 180, 0, 0, 0],
         backgroundColor: '#E86100'
      }, {
         label: 'Code Generator',
         data: [60, 0, 0, 0, 0, 0],
         backgroundColor: '#F81894'
      }, {
         label: 'Electronic Brain',
         data: [0, 0, 0, 0, 0, 0,0],
         backgroundColor: '#6cc4ee'
      }]
   }


var currentWeek = dailyTimePerProjectPerWeek.length - 1;
var weekValue = currentWeek; //At first time weekValue points to the current week

function drawData(){
var chart = new Chart(ctx, {
   type: 'bar',
   data: dailyTimePerProjectPerWeek[weekValue],
   options: {
      responsive: false,
      legend: {
         position: 'right' // place legend on the right side of chart
      },
      scales: {
         xAxes: [{
            stacked: true // this should be set to make the bars stacked
         }],
         yAxes: [{
            stacked: true // this also..
         }]
      }
   }
});
}

function incrementWeek(){
 if(weekValue === dailyTimePerProjectPerWeek.length - 1){
   console.log("This is the current week");
 } else {
  weekValue += 1;
  drawData();
 }
}

function decrementWeek(){
 if(weekValue === 0){
   console.log("This is the oldest week of the time series");
 } else {
  weekValue -= 1;
  drawData();
 }
}



/*
function selectWeek(){

}
*/

/*
function fixWeek(){




}*/
//Main Program
var chart = new Chart(ctx, {
   type: 'bar',
   data: dailyTimePerProjectPerWeek[weekValue],
   options: {
      responsive: false,
      legend: {
         position: 'right' // place legend on the right side of chart
      },
      scales: {
         xAxes: [{
            stacked: true // this should be set to make the bars stacked
         }],
         yAxes: [{
            stacked: true // this also..
         }]
      }
   }
});

事實是,我使用以下代碼來嘗試刷新圖像:

function drawData(){
var chart = new Chart(ctx, {
   type: 'bar',
   data: dailyTimePerProjectPerWeek[weekValue],
   options: {
      responsive: false,
      legend: {
         position: 'right' // place legend on the right side of chart
      },
      scales: {
         xAxes: [{
            stacked: true // this should be set to make the bars stacked
         }],
         yAxes: [{
            stacked: true // this also..
         }]
      }
   }
});
}

將您的drawData()函數更改為:

function drawData() {
  chart.data = dailyTimePerProjectPerWeek[weekValue];
  chart.update();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM