Javascript Chart.js中直线图的交点?

Javascript Chart.js中直线图的交点?,javascript,css,html,canvas,chart.js,Javascript,Css,Html,Canvas,Chart.js,对此搜索了很多,但基于chart.js,din没有得到任何答案。我已经问了这个问题,在这个问题中我使用了highchart.js并得到了解决方案,但现在我使用了chart.js库并试图找到解决方案。 下面是我尝试过的代码。我需要找到这两个线图组合之间的交点。请参见图表图像。 var配置={ 类型:'bar', 数据:{ 标签:[“0年”、“1年”、“2年”、“3年”、“4年”、“5年”、“6年”], 数据集:[{ 键入:“行”, 标签:“成本”, 数据:[150,15,25,14,10,7]

对此搜索了很多,但基于chart.js,din没有得到任何答案。我已经问了这个问题,在这个问题中我使用了highchart.js并得到了解决方案,但现在我使用了chart.js库并试图找到解决方案。 下面是我尝试过的代码。我需要找到这两个线图组合之间的交点。请参见图表图像。

var配置={
类型:'bar',
数据:{
标签:[“0年”、“1年”、“2年”、“3年”、“4年”、“5年”、“6年”],
数据集:[{
键入:“行”,
标签:“成本”,
数据:[150,15,25,14,10,7],
边框颜色:'#E35500',
填充:假,
线张力:0,
borderJoinStyle:'斜接',
}, {
键入:“行”,
标签:“现金流”,
数据:[20、180、170、220、160、190],
边框颜色:'#FFC000',
填充:假,
线张力:0,
borderJoinStyle:'斜接',
xAxes:[{
百分比:0.4
}]
},
{
键入:“行”,
标签:“累计流量”,
数据:[0,-10,20,30,40,50],
边框颜色:“红色”,
填充:假,
线张力:0,
borderJoinStyle:'斜接',
xAxes:[{
百分比:0.4
}]
}, {
类型:'bar',
标签:“Benifit(一次性)”,
背景色:“005998”,
数据:[40,50,60,80,50,60],
}, {
类型:'bar',
标签:“收益(重复性)”,
背景色:“0FAAFF”,
数据:[120150150180120140],
}
]
},
选项:{
标题:{
显示:对,
文本:“自定义图表标题”
},
比例:{
xAxes:[{
时间:{
显示格式:{
季度:'yyy'
}
},
对,,
贝吉纳泽罗:是的,
百分比:0.3,
id:'x轴标签',
位置:'底部',
scaleStartValue:20,
网格线:{
显示:假
},
}],
雅克斯:[{
对,,
id:'y轴标签',
滴答声:{
最高:300,
最低:-50,
步长:50,
},
位置:'左',
网格线:{
显示:假
},
}]
},
图例:{
位置:'右'
},
MaintaintAspectRatio:false,
scaleBeginAtZero:真
}
};
var ctx=document.getElementById(“myChart”).getContext(“2d”);
新图表(ctx,配置)
.GraphContain{
最大高度:500px;
位置:相对位置;
}

我们到了)

如果需要显示与X轴的交点,则只需模拟Y=0的直线即可

var ORDER_STATS={
"2016" : [10, 181, 194, -56, 130, 181, 179, 189, 30, 60, 193, 154], 
"2015" : [124, -50, 152, 187, 10, 164, 129, -16, 115, 119, 129, 171], 
"2014" : [-90, 80, 30, 59, 100, -30, 60, 116, 191, 181, -60, 106] 
};
变量颜色=['206191,26','119206,26','26200206','236124,98','206,26140','26,77206'];
//定义X
var ordersChartData={
标签:[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”],
数据集:[]
}
Object.keys(ORDER_STATS).forEach(function(key){
color=colors.shift();
ordershartdata.datasets.push(
{
标签:键,
线张力:0,
键入:“行”,
背景颜色:“rgba(“+color+”,0.1)”,
边框颜色:“rgba(“+color+”,1)”,
边界宽度:2,
pointBackgroundColor:“rgba(“+color+”,1)”,
pointBorderColor:#fff“,
点边界宽度:1,
点半径:4,
pointHoverBackgroundColor:#fff“,
pointHoverBorderColor:“rgba(“+color+”,1)”,
pointHoverBorderWidth:1,
数据:订单统计[关键]
}
);
});
var ctx=document.getElementById(“myChart”).getContext(“2d”);
Chart.defaults.global.defaultFontColor='灰色';
Chart.defaults.global.defaultFontFamily=“Tahoma”;
Chart.defaults.global.defaultFontSize=11;
Chart.defaults.global.defaultFontStyle='normal';
var myChart=新图表(ctx{
键入:“行”,
数据:ordersChartData,
默认尺寸:11,
选项:{
回答:是的,
标题:{
显示:对,
文本:“交叉点实现”,
fontColor:#444“,
fontFamily:“塔荷马”,
填充:0
},
图例:{
显示:对,
标签:{
fontColor:'灰色',
usePointStyle:true
}
},
工具提示:{
模式:“索引”,
是的,
位置:'最近',
车身间距:4
}
}
});
Chart.plugins.register({
afterDatasetsDraw:函数(chartInstance,easing){
var Y=chartInstance.scales['Y轴-0'];
var X=chartInstance.scales['X轴-0'];
zeroPointY=Y.top+((Y.bottom-Y.top)/(Y.ticks.length-1)*Y.zeroLineIndex);
零点x=Y.右;
yScale=(Y.bottom-Y.top)/(Y.end-Y.start);
xScale=(X.right-X.left)/(X.ticks.length-1);
var intersects=findIntersects(订单统计数据['2015'],订单统计数据['2014']);
var context=chartInstance.chart.ctx;
forEach(函数(结果,idx){
context.fillStyle='red';
context.beginPath();
弧((result.x*xScale)+zeroPointX,(Y.end-Y.start)-(result.Y*yScale)-(Y.end-Y.start)-zeroPointY),3,0,2*Math.PI,true);
context.fill();
});
}
});
函数findIntersects(第1行、第2行)
{
var相交=[];
第1行forEach(函数(val,idx){
var line1StartX=idx;
变量line1StartY=line1[idx];
var line1EndX=idx+1;
变量line1EndY=line1[idx+1];
变量