Chart.js — 绘制任意垂直线

2022-01-22 00:00:00 javascript chart.js

如何使用 Chart.js 在 x 轴上的特定点绘制垂直线?

How can I draw an vertical line at a particular point on the x-axis using Chart.js?

特别是,我想在 LineChart 上画一条线来表示当天.这是图表的模型:

In particular, I want to draw a line to indicate the current day on a LineChart. Here's a mockup of the chart: http://i.stack.imgur.com/VQDWR.png

推荐答案

更新 - 此答案适用于 Chart.js 1.x,如果您正在寻找 2.x 答案,请查看评论和其他答案.

解决方案

您扩展折线图并在绘图函数中包含用于绘制线条的逻辑.

Update - this answer is for Chart.js 1.x, if you are looking for a 2.x answer check the comments and other answers.

预览

HTML

HTML
<canvas id="LineWithLine" width="600" height="400"></canvas></div>

<div> <canvas id="LineWithLine" width="600" height="400"></canvas> </div>

脚本

var data = {
    labels: ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"],
    datasets: [{
        data: [12, 3, 2, 1, 8, 8, 2, 2, 3, 5, 7, 1]
    }]
};

var ctx = document.getElementById("LineWithLine").getContext("2d");

Chart.types.Line.extend({
    name: "LineWithLine",
    draw: function () {
        Chart.types.Line.prototype.draw.apply(this, arguments);

        var point = this.datasets[0].points[this.options.lineAtIndex]
        var scale = this.scale

        // draw line
        this.chart.ctx.beginPath();
        this.chart.ctx.moveTo(point.x, scale.startPoint + 24);
        this.chart.ctx.strokeStyle = '#ff0000';
        this.chart.ctx.lineTo(point.x, scale.endPoint);
        this.chart.ctx.stroke();

        // write TODAY
        this.chart.ctx.textAlign = 'center';
        this.chart.ctx.fillText("TODAY", point.x, scale.startPoint + 12);
    }
});

new Chart(ctx).LineWithLine(data, {
    datasetFill : false,
    lineAtIndex: 2
});

选项属性 lineAtIndex 控制在哪个点画线.

The option property lineAtIndex controls which point to draw the line at.

小提琴 - http://jsfiddle.net/dbyze2ga/14/

相关文章