[英]Draw vertical and horizonal lines on the radar chart (like x-y axes)
為了其他用戶的利益,我使用chartjs插件繪制了坐標軸:
plugins: [{
beforeDraw: function(chart, options) {
if (chart.config.data.drawXYAxes) {
var ctx = chart.chart.ctx;
var yaxis = chart.scales['scale'];
var paddingX = 100;
var paddingY = 40;
ctx.save();
ctx.beginPath();
ctx.strokeStyle = '#0000ff';
ctx.lineWidth = 0.75;
drawArrow(ctx, yaxis.xCenter, yaxis.yCenter, yaxis.xCenter - yaxis.drawingArea - paddingX, yaxis.yCenter);
drawArrow(ctx, yaxis.xCenter, yaxis.yCenter, yaxis.xCenter + yaxis.drawingArea + paddingX, yaxis.yCenter);
drawArrow(ctx, yaxis.xCenter, yaxis.yCenter, yaxis.xCenter, yaxis.yCenter - yaxis.drawingArea - paddingY);
drawArrow(ctx, yaxis.xCenter, yaxis.yCenter, yaxis.xCenter, yaxis.yCenter + yaxis.drawingArea + paddingY);
ctx.stroke();
ctx.restore();
}
}
}]
paddingX
和paddingY
允許我在實際雷達圖上方顯示箭頭,否則該圖將從頂部位置繪制,而箭頭沒有上揚的空間。
drawArrow函數(credit: https ://stackoverflow.com/a/6333775/1624330)將畫線:
drawArrow = function(context, fromx, fromy, tox, toy) {
var headlen = 10;
var dx = tox - fromx;
var dy = toy - fromy;
var angle = Math.atan2(dy, dx);
context.moveTo(fromx, fromy);
context.lineTo(tox, toy);
context.lineTo(tox - headlen * Math.cos(angle - Math.PI / 6), toy - headlen * Math.sin(angle - Math.PI / 6));
context.moveTo(tox, toy);
context.lineTo(tox - headlen * Math.cos(angle + Math.PI / 6), toy - headlen * Math.sin(angle + Math.PI / 6));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.