简体   繁体   English

尝试从chart.js访问条形时.datasets未定义

[英].datasets is undefined when trying to access bars from chart.js

I'm trying to recreate this example: 我正在尝试重新创建此示例:

chart.js bar chart color change based on value chart.js条形图基于值的颜色变化

With the following code 用下面的代码

  <script src="/chart.js/dist/Chart.js"></script>
   <canvas id="myChart" width="400" height="400"></canvas>
   <script>
       var ctx = document.getElementById('myChart').getContext('2d');
       window.myChart = new Chart(ctx, {
           type: 'bar',
           data: {
               labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
               datasets: [{
                   label: '# of Votes',
                   data: [12, 19, 3, 5, 3, 3],
                   fillColor: "rgba(220,220,220,0.5)",
                   strokeColor: "rgba(220,220,220,0.8)",
                   highlightFill: "rgba(220,220,220,0.75)",
                   highlightStroke: "rgba(220,220,220,1)",
                   borderWidth: 1
               }]
           },
       });
       var bars = myChart.datasets[0].bars;
       for (i = 0; i < bars.length; i++) {
           var color = "green";
           //You can check for bars[i].value and put your conditions here
           if (bars[i].value < 3) {
               color = "red";
           } else if (bars[i].value < 5) {
               color = "orange"

           } else if (bars[i].value < 8) {
               color = "yellow"
           } else {
               color = "green"
           }
           bars[i].fillColor = color;
       }
       myChart.update();

   </script>

but I get in console the TypeError: 但我进入控制台TypeError:

myChart.datasets is undefined on the line var bars = myChart.datasets[0].bars; 在行上未定义myChart.datasets var bars = myChart.datasets [0] .bars;

Do you have an idea what I'm overlooking? 你知道我在忽略什么吗?

Thank you 谢谢

your dataset was empty, was not being done as the example quoted 您的数据集为空,没有像引用的示例那样完成

The correct way to do as the example you mentioned is: 作为您提到的示例的正确方法是:

var barChartData = {
    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
    datasets: [
        {
            label: '# of Votes',
                   data: [12, 19, 3, 5, 3, 3],
                   fillColor: "rgba(220,220,220,0.5)",
                   strokeColor: "rgba(220,220,220,0.8)",
                   highlightFill: "rgba(220,220,220,0.75)",
                   highlightStroke: "rgba(220,220,220,1)",
                   borderWidth: 1
        }
    ]
};

var ctx = document.getElementById('myChart').getContext('2d');
       window.myObjBar = new Chart(ctx).Bar(barChartData, {
          responsive : true
    });
       var bars = myObjBar.datasets[0].bars;
    for(i=0;i<bars.length;i++){
       var color="green";
       //You can check for bars[i].value and put your conditions here
       if(bars[i].value<3){
        color="red";
       }
       else if(bars[i].value<5){
        color="orange"

       }
       else if(bars[i].value<8){
        color="yellow"
       }
       else{
        color="green"
       }

       bars[i].fillColor = color;

    }
    myObjBar.update(); //update the cahrt

Here is an example working :) 是一个工作示例:)

Here is the complete example you want. 这是您想要的完整示例。

 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script> <canvas id="myChart" width="400" height="400"></canvas> <script> //Creating a barchart with default values var myChart = new Chart(document.getElementById("myChart"), { "type": "bar", "data": { "labels": ["January", "February", "March", "April", "May", "June", "July"], "datasets": [{ "label": "My First Dataset", "data": [65, 59, 80, 81, 56, 55, 40], "fill": false, "backgroundColor": ["#fb4d4d", "#fb9d4d", "#f8fb4d", "#98fb4d", "#4effee", "#4cb9f8", "#574cf8"], "borderColor": ["#fb4d4d", "#fb9d4d", "#f8fb4d", "#98fb4d", "#4effee", "#4cb9f8", "#574cf8"], "borderWidth": 1 }] }, "options": { "scales": { "yAxes": [{ "ticks": { "beginAtZero": true } }] } } }); //Getting the bar-chart existing values var bars = myChart.config.data.datasets[0]; var data = bars.data; //Updating the existing value (object which holds value) for (i = 0; i < data.length; i++) { var bgcolor = ""; var brcolor = ""; if (data[i] < 30) { bgcolor = "red"; brcolor = "red"; } else if (data[i] < 50) { bgcolor = "orange"; brcolor = "orange"; } else if (data[i] < 80) { bgcolor = "yellow"; brcolor = "yellow"; } else { bgcolor = "green"; brcolor = "green"; } bars.backgroundColor[i] = bgcolor; bars.borderColor[i] = brcolor; } //Triggering the chart update in 3 seconds. setTimeout(function(){ myChart.update(); }, 3000); </script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM