Javascript 在图表js中的半圆环图中,在起点和终点之间画一条线

Javascript 在图表js中的半圆环图中,在起点和终点之间画一条线,javascript,jquery,angularjs,charts,chart.js,Javascript,Jquery,Angularjs,Charts,Chart.js,我用ChartJS绘制了一个半圆环图。但我想在图表底部画一条直线(绿色),就像 我怎样才能画出这条线呢?这不是战争电影的素材。这不是正义出错的记录片材料。但它应该会让你兴奋一两次 这是一个插件,其工作原理如下。它沿着油炸圈饼第一片的起始侧一直绘制到中心的细绿线,然后沿着油炸圈饼最后一片的结束侧继续绘制。这样做是为了能够使用人们希望的任何甜甜圈周长,例如5/8的圆: 使用了一些(8像素)填充,因此细绿线将有一些空间延伸到切片之外的位(4像素)。下面还提供了代码(注释足够多) var thet

我用ChartJS绘制了一个半圆环图。但我想在图表底部画一条直线(绿色),就像


我怎样才能画出这条线呢?

这不是战争电影的素材。这不是正义出错的记录片材料。但它应该会让你兴奋一两次

这是一个插件,其工作原理如下。它沿着油炸圈饼第一片的起始侧一直绘制到中心的细绿线,然后沿着油炸圈饼最后一片的结束侧继续绘制。这样做是为了能够使用人们希望的任何甜甜圈周长,例如5/8的圆:

使用了一些(8像素)填充,因此细绿线将有一些空间延伸到切片之外的位(4像素)。下面还提供了代码(注释足够多)

var thethingreenline插件={
afterDatasetsDraw:函数(chartInstance,easing){
//绘制所需的上下文。
var ctx=chartInstance.chart.ctx;
//第一个(假设是唯一的)数据集。
var dataset=chartInstance.data.datasets[0];
//数据集的数据长度。
var datasetDataLength=dataset.data.length;
//第一个切片的模型。
var firstDatumModel=dataset.\u meta[Object.keys(dataset.\u meta)[0].\u model;
//最后一个切片的模型。
var lastDatumModel=dataset.\u meta[Object.keys(dataset.\u meta)[0]].data[datasetDataLength-1]。\u model;
//细绿线的半径(从甜甜圈的中心测量)。
//添加几个像素,使线从切片的外半径延伸一点。
var lineRadius=firstDatumModel.outerRadius+4;
//细绿线的第一点(对于第一个切片)。
var firstSliceStartX=firstDatumModel.x+lineRadius*Math.cos(firstDatumModel.startAngle);
var firstSliceStartY=firstDatumModel.y+lineRadius*Math.sin(firstDatumModel.startAngle);
//细绿线的最后一点(用于最后一个切片)。
var lastSliceEndX=lastDatumModel.x+lineRadius*Math.cos(lastDatumModel.endAngle);
var lastSliceEndY=lastDatumModel.y+lineRadius*Math.sin(lastDatumModel.endAngle);
//保存上下文,以免弄乱它。我们将稍后还原它。
ctx.save();
//绿色的
ctx.strokeStyle='#3db24b';
//稀薄的
ctx.lineWidth=4.0;
ctx.beginPath();
ctx.moveTo(firstSliceStartX,firstSliceStartY);
//穿过中心,以便其他甜甜圈(例如3/4甜甜圈)有意义。
ctx.lineTo(firstDatumModel.x,firstDatumModel.y);
ctx.lineTo(lastSliceEndX,lastSliceEndY);
ctx.stroke();
//恢复上下文。
ctx.restore();
}
};
Chart.pluginService.register(thingreenline插件);
var ctx=document.getElementById(“myChart”);
var myChart=新图表(ctx{
键入:“甜甜圈”,
数据:{
标签:[“红色”、“蓝色”、“黄色”、“绿色”、“紫色”、“橙色”],
数据集:[{
数据:[12,19,3,5,2,3],
背景颜色:[
"rgba(255,99,132,0.2)",,
“rgba(54162235,0.2)”,
"rgba(255,206,86,0.2)",,
“rgba(751921920.2)”,
“rgba(153102255,0.2)”,
‘rgba(255、159、64、0.2)’
],
边框颜色:[
"rgba(255,99132,1)",,
“rgba(54162235,1)”,
"rgba(255,206,86,1)",,
"rgba(751921921)",,
"rgba(153102255,1)",,
‘rgba(255、159、64、1)’
],
边框宽度:1
}]
},
选项:{
周长:1.0*Math.PI,
旋转:1.0*Math.PI,
布局:{
填充:8
}
}
});

这不是战争电影素材。这不是正义出错的记录片材料。但它应该会让你兴奋一两次

这是一个插件,其工作原理如下。它沿着油炸圈饼第一片的起始侧一直绘制到中心的细绿线,然后沿着油炸圈饼最后一片的结束侧继续绘制。这样做是为了能够使用人们希望的任何甜甜圈周长,例如5/8的圆:

使用了一些(8像素)填充,因此细绿线将有一些空间延伸到切片之外的位(4像素)。下面还提供了代码(注释足够多)

var thethingreenline插件={
afterDatasetsDraw:函数(chartInstance,easing){
//绘制所需的上下文。
var ctx=chartInstance.chart.ctx;
//第一个(假设是唯一的)数据集。
var dataset=chartInstance.data.datasets[0];
//数据集的数据长度。
var datasetDataLength=dataset.data.length;
//第一个切片的模型。
var firstDatumModel=dataset.\u meta[Object.keys(dataset.\u meta)[0].\u model;
//最后一个切片的模型。
var lastDatumModel=dataset.\u meta[Object.keys(dataset.\u meta)[0]].data[datasetDataLength-1]。\u model;
//细绿线的半径(从甜甜圈的中心测量)。
//添加几个像素,使线从切片的外半径延伸一点。
var lineRadius=firstDatumModel.outerRadius+4;
//细绿线的第一点(对于第一个切片)。
var firstSliceStartX=firstDatumModel.x+lineRadius*Math.cos(firstDatumModel.startAngle);
var firstSliceStartY=firstDatumModel.y+lineRadius*Math.sin(firstDatumModel.startAngle);
//细绿线的最后一点(用于最后一个切片)。
var lastSliceEndX=lastDatumModel.x+lineRadius*Math.cos(lastDatumModel.endAngle);
var lastSliceEndY=lastDatumModel.y+lineRadius*Math.sin(lastDatumModel.endAngle);
//保存上下文,以免弄乱它。我们将稍后还原它。
ctx.save();
//绿色的
ctx.strokeStyle='#3db24b';
//稀薄的
ctx.lineWidth=4.0;
ctx.beginPath();
ctx.moveTo(firstSliceStartX,firstSliceStartY);
//通过