1. ホーム
  2. javascript

[解決済み] Chart.js - 任意の垂直線を描画する

2023-04-03 21:25:29

質問

Chart.jsを使って、X軸の特定の位置に縦線を引くにはどうしたらよいでしょうか。

特に、LineChartに現在日を示す線を引きたいのです。以下はそのチャートのモックアップです。 http://i.stack.imgur.com/VQDWR.png

どのように解決するのですか?

更新 - この回答はChart.js 1.x用です。もし2.x用の回答をお探しなら、コメントや他の回答をご覧ください。

折れ線グラフを拡張し、draw関数に線を引くためのロジックを入れています。


プレビュー


HTML

<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は、どの点に線を引くかを制御します。

フィドル http://jsfiddle.net/dbyze2ga/14/