javascript - Chart.JS 数据集标签格式不同

标签 javascript jquery chart.js

我正在使用 Chart.JS 创建一个组合图表,它是一个条形/折线组合。我想用 % 符号显示 dataset[0] 的标签,我想用 dataset[1] 符号显示 dataset[1] 的标签$ 符号。现在,当我提到标签时,我的意思是当您将鼠标悬停在条形图/线条上时显示的内容并显示信息。我尝试了以下语法,但这甚至不会显示图表(我更改了代码以添加 if 语句以尝试考虑 dataset[0] & 数据集[1])

dataset[0] 显示 % 符号和 dataset[1] 显示 的正确方法是什么$ 符号?

        var labelsarr = ["Red 12", "Red 13", "Yellow 12", "Yellow 13", "Blue 12", "Blue 13"],
    ;

    var ctx = document.getElementById("myChart");
    var myChart = new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: labelsarr,
                    datasets: [{
                            type: 'line',
                            fill: false,
                            label: 'Percent',
                            backgroundColor: 'rgba(255,0,0,1)',
                            borderColor: 'rgba(255,0,0,1)',
                            data: [3, 4, 10, 5, 8, 7],
                        }, {}
                        data: [12, 19, 3, 5, 2, 3],
                        label: 'Total Revenue',
                        backgroundColor: 'rgba(0, 129, 214, 0.8)',
                    }]
            },
            options: {
                tooltips: {
                    callbacks: {
                        if (chart.data.datasets = [1]) {
                            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;
                            }
                        }
                        if (chart.data.datasets = [0]) {
                            label: function(value) {
                                return value + "%"
                            }
                        }
                    }
                }
            },
            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;
                labels.forEach(function(e, i) {
                    var bar = chart.data.datasets[1]._meta[0].data[i]._model;
                    var dataPoint = e.split(/\s/)[1];
                    if (dataPoint === '12')
                        bar.backgroundColor = 'blue';
                    else if (dataPoint === '13')
                        bar.backgroundColor = 'orange';
                });
            }
        }]
    });

最佳答案

使用以下工具提示回调函数:

callbacks: {
   label: function(t, d) {
      if (t.datasetIndex === 0) {
         var xLabel = d.datasets[t.datasetIndex].label;
         var yLabel = t.yLabel + '%';
         return xLabel + ': ' + yLabel;
      } else if (t.datasetIndex === 1) {
         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;
      }
   }
}

ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ

var labelsarr = ["Red 12", "Red 13", "Yellow 12", "Yellow 13", "Blue 12", "Blue 13"];

var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
   type: 'bar',
   data: {
      labels: labelsarr,
      datasets: [{
         type: 'line',
         fill: false,
         label: 'Percent',
         backgroundColor: 'rgba(255,0,0,1)',
         borderColor: 'rgba(255,0,0,1)',
         data: [3, 4, 10, 5, 8, 7],
      }, {
         data: [12, 19, 3, 5, 2, 3],
         label: 'Total Revenue',
         backgroundColor: 'rgba(0, 129, 214, 0.8)',
      }]
   },
   options: {
      tooltips: {
         callbacks: {
            label: function(t, d) {
               if (t.datasetIndex === 0) {
                  var xLabel = d.datasets[t.datasetIndex].label;
                  var yLabel = t.yLabel + '%';
                  return xLabel + ': ' + yLabel;
               } else if (t.datasetIndex === 1) {
                  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;
         labels.forEach(function(e, i) {
            var bar = chart.data.datasets[1]._meta[0].data[i]._model;
            var dataPoint = e.split(/\s/)[1];
            if (dataPoint === '12')
               bar.backgroundColor = 'blue';
            else if (dataPoint === '13')
               bar.backgroundColor = 'orange';
         });
      }
   }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="myChart"></canvas>

一些语法问题已得到修复,请仔细查找。

关于javascript - Chart.JS 数据集标签格式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402619/

相关文章:

PHP从下拉选项(int)类型中获取值

javascript - MouseOverEvent 和 MouseOutEvent 的触摸等效事件在移动设备上不起作用?

javascript - 区分 Imgur 图库中的相册和图像

jquery - 为什么我不能点击这个 div?

javascript - Chart.js 条形图标签在悬停时隐藏

javascript - Chartjs-Vue 图表为空

javascript - 将事件位置映射到chartjs折线图中的y轴值

javascript - 如何在MainApplication.java中获取环境变量 react native

javascript - 检查数组中是否包含与新数组具有相同值的数组

javascript - jQuery UI 可排序/可拖动 - 带调色板(复制/删除而不是移动)