开发者问题收集

Chart.js 图表从未生成

2017-07-27
109

我已验证我的两个数组的长度均为 24 - 但出于某种原因,以下语法无法生成我的图表。它仅适用于带有条形图的一个数据集,但我正尝试将其修改为带有两个数据集的组合条形线图。

是什么阻止我的图表显示,因为这不是数据问题...

    alert(values.length);
alert(values1.length);
var ctx = document.getElementById('canvas').getContext('2d');
var chart = new Chart(ctx, {
        datasets: [{
                type: 'bar',
                labels: labelsarr,
                label: 'Red Team',
                backgroundColor: 'rgba(0, 129, 214, 0.8)',
                data: [values]
            }, {
                type: 'line', 
                label: 'Green Team',
                backgroundColor: 'rgba(0,129, 218, 0.8)',
                data: [values1]
            }, {
            options: {
                tooltips: {
                    callbacks: {
                        label: function (t, d) {
                            var xLabel = d.datasets[t.datasetIndex].label;
                            var yLabel = t.yLabel >= 1000 ? '$' + t.yLabel.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") : '$' + t.yLabel;
                            return xLabel + ': ' + yLabel;
                        }
                    }
                },
                legend: {
                    display: false,
                    position: 'top',
                },
                scales: {
                    yAxes: [{
                            ticks: {
                                beginAtZero: true,
                                callback: function (value, index, values) {
                                    if (parseInt(value) >= 1000) {
                                        return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                                    } else { return '$' + value; }
                                }
                            }
                        }]
                }
            },
            plugins: [{
                    beforeDraw: function (chart) {
                        var labels = chart.data.labels;
                    }
                }]
            }
        ]}
    );
2个回答

几个问题:

  • 您没有正确定义图表类型。第一个数据集 的类型 应该在数据集本身之外。
  • 您正在独立分配 datasets 数组,而它属于 data 对象( labels 数组也是如此)。
  • 由于 values values1 已经是一个数组,因此不应使用数组符号包装它们。

这是您代码的修订版本:

var labelsarr = ['Jan', 'Feb', 'Mar'];
var values = [1, 2, 3];
var values1 = [1, 2, 3];

// above variables are explicitly defined, since no ajax is being used

var ctx = document.getElementById('canvas').getContext('2d');
var chart = new Chart(ctx, {
   type: 'bar',
   data: {
      labels: labelsarr,
      datasets: [{
         label: 'Red Team',
         backgroundColor: 'rgba(0, 129, 214, 0.8)',
         data: values
      }, {
         type: 'line',
         label: 'Green Team',
         backgroundColor: 'rgba(0,129, 218, 0.3)',
         data: values1
      }]
   },
   options: {
      tooltips: {
         callbacks: {
            label: function(t, d) {
               var xLabel = d.datasets[t.datasetIndex].label;
               var yLabel = t.yLabel >= 1000 ? '$' + t.yLabel.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") : '$' + t.yLabel;
               return xLabel + ': ' + yLabel;
            }
         }
      },
      legend: {
         display: false,
         position: 'top',
      },
      scales: {
         yAxes: [{
            ticks: {
               beginAtZero: true,
               callback: function(value, index, values) {
                  if (parseInt(value) >= 1000) {
                     return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                  } else {
                     return '$' + value;
                  }
               }
            }
         }]
      }
   },
   plugins: [{
      beforeDraw: function(chart) {
         var labels = chart.data.labels;
      }
   }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="canvas"></canvas>
ɢʀᴜɴᴛ
2017-07-27

请参阅此处的文档 http://www.chartjs.org/docs/latest/

1 图表可以是线形图或条形图,您已同时指定了两者

它应该看起来像这样,只需重新排列您的代码并尝试就可以正常工作

var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }
});
MyTwoCents
2017-07-27