在v2上的chart.js中的图表上绘制水平线

tec*_*eek 18 javascript jquery charts chart.js

我使用chart.js画了一个折线图.对于标签和数据集,我从数据库中获取值.我是chart.js及其非常强大的库的新手,但我无法完全理解它.我想画多个水平线.就像数据集的平均值,标准偏差和最小值和最大值一样.我在stackoverflow中尝试了这个问题,但是这些都给出了错误,或者可能是我无法理解工作.这是我的chart.js代码

function display_graph(id, label, data) {
var ctx = document.getElementById(id);
var data = {
    labels: data.labels,
    datasets: [
        {
            label: label,
            fill: false,
            lineTension: 0.1,
            backgroundColor: "rgba(75,192,192,0.4)",
            borderColor: "rgba(75,192,192,1)",
            borderCapStyle: 'butt',
            borderDash: [],
            borderDashOffset: 0.0,
            borderWidth: 1,
            borderJoinStyle: 'miter',
            pointBorderColor: "rgba(75,192,192,1)",
            pointBackgroundColor: "#fff",
            pointBorderWidth: 1,
            pointHoverRadius: 5,
            pointHoverBackgroundColor: "rgba(75,192,192,1)",
            pointHoverBorderColor: "rgba(220,220,220,1)",
            pointHoverBorderWidth: 2,
            pointRadius: 1,
            pointHitRadius: 10,
            data: data.assay_value,
            spanGaps: false
        }
    ]
};

//options
var options = {
    responsive: true,
    title: {
        display: true,
        position: "top",
        text: label,
        fontSize: 18,
        fontColor: "#111"
    },
    legend: {
        display: true,
        position: "bottom",
        labels: {
            fontColor: "#333",
            fontSize: 16
        }
    }
};
var Blanks_Chart=null;
Blanks_Chart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: options
});}
Run Code Online (Sandbox Code Playgroud)

jor*_*lis 32

您可以使用chart.js注释插件轻松地在图表上绘制线条,而不必手动处理画布中的渲染像素(旧方法会给您带来错误).请注意,该插件由chart.js与同一团队创建/支持,并在chart.js文档中提及.

这是一个示例代码库,演示如何在图表上创建一条线.

添加插件后,只需annotation在图表配置中设置属性即可.这是一个例子.

var myChart = new Chart(ctx, {
  type: 'line',
  data: {
    labels: ["January", "February"],
    datasets: [{
      label: 'Dataset 1',
      borderColor: window.chartColors.blue,
      borderWidth: 2,
      fill: false,
      data: [2, 10]
    }]
  },
  options: {
    responsive: true,
    title: {
      display: true,
      text: 'Chart.js Draw Line On Chart'
    },
    tooltips: {
      mode: 'index',
      intersect: true
    },
    annotation: {
      annotations: [{
        type: 'line',
        mode: 'horizontal',
        scaleID: 'y-axis-0',
        value: 5,
        borderColor: 'rgb(75, 192, 192)',
        borderWidth: 4,
        label: {
          enabled: false,
          content: 'Test label'
        }
      }]
    }
  }
});
Run Code Online (Sandbox Code Playgroud)


Fir*_*ald 6

如果您正在使用NPMchartjs-plugin-annotation.js,重要的事情 - 您可能会忘记,是注册插件。

所以首先你安装了 npm 包(这里是React):

npm i react-chartjs-2                (depends on your framework)
npm i chartjs-plugin-annotation      (always required)
Run Code Online (Sandbox Code Playgroud)

请参阅Vue.jsAngular以了解其依赖于框架的包。

选项 1:全局插件注册

import { Line } from 'react-chartjs-2';
import Chart from 'chart.js';
import * as ChartAnnotation from 'chartjs-plugin-annotation';

Chart.plugins.register([ChartAnnotation]); // Global

// ...
render() {
    return (
        <Line data={chartData} options={chartOpts} />
    )
}
Run Code Online (Sandbox Code Playgroud)

选项 2:每个图表插件注册

import { Line } from 'react-chartjs-2';
import * as ChartAnnotation from 'chartjs-plugin-annotation';

// ...
render() {
    return (
                                                   {/* per chart */}
        <Line data={chartData} options={chartOpts} plugins={[ChartAnnotation]} />
    )
}
Run Code Online (Sandbox Code Playgroud)

chartData相当于data: {部分和chartOptsto options: {from jordanwillis answer。有关更多信息,请参阅github 帖子。

chart.js还有许多其他插件可用


小智 5

如果要绘制阈值线,最简单的方法是使用混合折线图。

注意:制作一个填充阈值的数组,长度应与您的数据集相同。

var datasets = [1, 2, 3];
var ctx = document.getElementById('chart').getContext('2d');
var thresholdValue = 2;
var thresholdHighArray = new Array(datasets.length).fill(thresholdValue);
var myChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: [],
                datasets: [
                {datasets}, thresholdHighArray]
            },         
            options: {
                responsive: true,
                legend: {
                    position: 'bottom',
                },
                scales: {
                    xAxes: [{
                        display: true,
                        scaleLabel: {
                                display: true,
                                labelString: 'Readings'
                        }
                    }],
                    yAxes: [{
                        display: true,
                        scaleLabel: {
                                display: true,
                                labelString: 'Reading ( °C )'
                        }
                    }]
                },
                annotation: {
                  annotations: [
                    {
                      type: "line",
                      mode: "vertical",
                      scaleID: "x-axis-0",
                      borderColor: "red",
                      label: {
                        content: "",
                        enabled: true,
                        position: "top"
                      }
                    }
                  ]
                }
        });
    };
Run Code Online (Sandbox Code Playgroud)