Javascript 如何在chart.js中插入线性水平线

Javascript 如何在chart.js中插入线性水平线,javascript,web,graph,chart.js,Javascript,Web,Graph,Chart.js,我制作了一张图表来监测体重指数的进展。我想加一条水平线,比如y=25。这将表明该人所需的BMI。在JDFIDLE中,我创建了一个数据集,其中始终包含相同的数据,这与我所寻找的效果相同:y=Actor.DesiredBmi。我该怎么做 var canvas = document.getElementById('bmi-chart'); window.chartColors = { red: 'rgb(255, 99, 132)', orange: 'rgb(255, 159, 64)',

我制作了一张图表来监测体重指数的进展。我想加一条水平线,比如y=25。这将表明该人所需的BMI。在JDFIDLE中,我创建了一个数据集,其中始终包含相同的数据,这与我所寻找的效果相同:y=Actor.DesiredBmi。我该怎么做

var canvas = document.getElementById('bmi-chart');
window.chartColors = {
  red: 'rgb(255, 99, 132)',
  orange: 'rgb(255, 159, 64)',
  yellow: 'rgb(255, 205, 86)',
  green: 'rgb(51, 204, 51)',
  blue: 'rgb(54, 162, 235)'
};

var myLineChart = new Chart(canvas, {
  type: 'line',
  data: {
    labels: ['2020-05-20', '2020-05-21', '2020-05-23', '2020-05-24', '2020-05-25', '2020-06-02', '2020-06-03', '2020-06-04', '2020-06-05', '2020-06-06', '2020-06-07'],
    datasets: [{
        order: 1,
        label: 'Current BMI',
        fill: false,
        borderColor: window.chartColors.blue,
        data: [36.0, 24.0, 29.0, 26.0, 23.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0]
      }, {
        order: 2,
        label: 'Desired BMI',
        type: 'line',
        borderColor: window.chartColors.red,
        data: [24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24]
      }

    ]
  },
  options: {
    responsive: true,
    backgroundRules: [{
        backgroundColor: window.chartColors.blue,
        yAxisSegement: 18.5
      },
      {
        backgroundColor: window.chartColors.green,
        yAxisSegement: 24.9
      },
      {
        backgroundColor: window.chartColors.yellow,
        yAxisSegement: 29.9
      },
      {
        backgroundColor: window.chartColors.orange,
        yAxisSegement: 34.9
      }, {
        backgroundColor: window.chartColors.red,
        yAxisSegement: Infinity
      }
    ],
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: false,
          stepSize: 1
        }
      }],
      xAxes: [{
        type: 'time',
        time: {
          displayFormats: {
            week: 'YYYY MMM D h:mm:ss'
          }
        }
      }]
    }
  },
  plugins: [{
    beforeDraw: function(chart) {
      var ctx = chart.chart.ctx;
      var ruleIndex = 0;
      var rules = chart.chart.options.backgroundRules;
      var yaxis = chart.chart.scales["y-axis-0"];
      var xaxis = chart.chart.scales["x-axis-0"];
      var partPercentage = 1 / (yaxis.ticksAsNumbers.length - 1);
      for (var i = yaxis.ticksAsNumbers.length - 1; i > 0; i--) {
        if (yaxis.ticksAsNumbers[i] < rules[ruleIndex].yAxisSegement) {
          ctx.fillStyle = rules[ruleIndex].backgroundColor;
          ctx.fillRect(xaxis.left, yaxis.top + ((i - 1) * (yaxis.height * partPercentage)), xaxis.width, yaxis.height * partPercentage);
        } else {
          ruleIndex++;
          i++;
        }
      }
    }
  }]
});
var canvas=document.getElementById('bmi-chart');
window.ChartColor={
红色:“rgb(255,99,132)”,
橙色:“rgb(25515964)”,
黄色:“rgb(25520586)”,
绿色:“rgb(51204,51)”,
蓝色:“rgb(54162235)”
};
var myLineChart=新图表(画布{
键入:“行”,
数据:{
标签:['2020-05-20','2020-05-21','2020-05-23','2020-05-24','2020-05-25','2020-06-02','2020-06-03','2020-06-04','2020-06-05','2020-06-06','2020-06-07'],
数据集:[{
订单:1,
标签:“当前体重指数”,
填充:假,
边框颜色:window.chartColors.blue,
数据:[36.0,24.0,29.0,26.0,23.0,26.0,26.0,26.0,26.0,26.0,26.0,26.0]
}, {
订单:2,
标签:“所需体重指数”,
键入:“行”,
边框颜色:window.chartColors.red,
数据:[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24]
}
]
},
选项:{
回答:是的,
背景规则:[{
背景颜色:window.chartColors.blue,
雅克西赛段:18.5
},
{
背景颜色:window.chartColors.green,
雅克西赛段:24.9
},
{
背景颜色:window.chartColors.yellow,
雅克西赛段:29.9
},
{
背景颜色:window.chartColors.orange,
雅克西赛段:34.9
}, {
背景颜色:window.chartColors.red,
YaxisSegment:无限
}
],
比例:{
雅克斯:[{
滴答声:{
贝吉纳泽罗:错,
步长:1
}
}],
xAxes:[{
键入:“时间”,
时间:{
显示格式:{
周:“YYYY MMM D h:mm:ss”
}
}
}]
}
},
插件:[{
绘制前:函数(图表){
var ctx=chart.chart.ctx;
var规则指数=0;
var规则=chart.chart.options.backgroundRules;
var yaxis=图表.图表.刻度[“y轴-0”];
var xaxis=图表.图表.刻度[“x轴-0”];
var partPercentage=1/(yaxis.ticksaNumber.length-1);
对于(var i=yaxis.ticksAsNumbers.length-1;i>0;i--){
if(yaxis.ticksAsNumbers[i]

```

您应该更新数据源并更新图表

addline(25);
function addline(num){
   var item={
        order: myLineChart.data.datasets.length-1,
        label: 'Title',
        type: 'line',
        borderColor: window.chartColors.black,
        data:new Array(myLineChart.data.datasets[0].data.length).fill(num)
   }
   myLineChart.data.datasets.push(item)
   myLineChart.update();
};
var canvas=document.getElementById('bmi-chart');
window.ChartColor={
红色:“rgb(255,99,132)”,
橙色:“rgb(25515964)”,
黄色:“rgb(25520586)”,
绿色:“rgb(51204,51)”,
蓝色:“rgb(54162235)”
};
var myLineChart=新图表(画布{
键入:“行”,
数据:{
标签:['2020-05-20','2020-05-21','2020-05-23','2020-05-24','2020-05-25','2020-06-02','2020-06-03','2020-06-04','2020-06-05','2020-06-06','2020-06-07'],
数据集:[{
订单:1,
标签:“当前体重指数”,
填充:假,
边框颜色:window.chartColors.blue,
数据:[36.0,24.0,29.0,26.0,23.0,26.0,26.0,26.0,26.0,26.0,26.0,26.0]
}, {
订单:2,
标签:“所需体重指数”,
键入:“行”,
边框颜色:window.chartColors.red,
数据:[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24]
}
]
},
选项:{
回答:是的,
背景规则:[{
背景颜色:window.chartColors.blue,
雅克西赛段:18.5
},
{
背景颜色:window.chartColors.green,
雅克西赛段:24.9
},
{
背景颜色:window.chartColors.yellow,
雅克西赛段:29.9
},
{
背景颜色:window.chartColors.orange,
雅克西赛段:34.9
}, {
背景颜色:window.chartColors.red,
YaxisSegment:无限
}
],
比例:{
雅克斯:[{
滴答声:{
贝吉纳泽罗:错,
步长:1
}
}],
xAxes:[{
键入:“时间”,
时间:{
显示格式:{
周:“YYYY MMM D h:mm:ss”
}
}
}]
}
},
插件:[{
绘制前:函数(图表){
var ctx=chart.chart.ctx;
var规则指数=0;
var规则=chart.chart.options.backgroundRules;
var yaxis=图表.图表.刻度[“y轴-0”];
var xaxis=图表.图表.刻度[“x轴-0”];
var partPercentage=1/(yaxis.ticksaNumber.length-1);
对于(var i=yaxis.ticksAsNumbers.length-1;i>0;i--){
if(yaxis.ticksAsNumbers[i]

您应该更新数据源并更新图表

addline(25);
function addline(num){
   var item={
        order: myLineChart.data.datasets.length-1,
        label: 'Title',
        type: 'line',
        borderColor: window.chartColors.black,
        data:new Array(myLineChart.data.datasets[0].data.length).fill(num)
   }
   myLineChart.data.datasets.push(item)
   myLineChart.update();
};
var canvas=document.getElementById('bmi-chart');
window.ChartColor={
红色:“rgb(255,99,132)”,
橙色:“rgb(25515964)”,
黄色:“rgb(25520586)”,
绿色:“rgb(51204,51)”,
蓝色: