:
$('#placeholder').on('plotclick', function(event, pos, item) {
$('#output').empty();
if (item) { // clicked on point
$('#output').text('series: ' + item.series.label + ' - datapoint: ' + item.dataIndex);
return;
}
else { // search for line
for (var i = 1; i < data.length; i++) {
if (data[i-1][0] <= pos.x && pos.x < data[i][0]) {
var lineX = (pos.x - data[i-1][0])/(data[i][0] - data[i-1][0]);
var lineY = data[i-1][1] + lineX * (data[i][1] - data[i-1][1]);
if (Math.abs(pos.y - lineY) < maxDistance) {
$('#output').html('between datapoints ' + (i-1) + ' and ' + i + '<br />'
+ 'distance from line: ' + Math.abs(pos.y - lineY).toFixed(3));
}
return;
}
}
}
});
は完全な例については、このfiddleを参照してください。複数のデータ系列がある場合は、各行の最も近い点を検索し、最も近い線を計算することができます。
ありがとうございました!もう1つの質問。また、スプラインプラグインを使用して滑らかな線を描画しています。私はあなたのアルゴリズムが直線のために働くのを見ることができます。滑らかな線に対しても、同じことをどのようにしますか? –
平滑化された線を描いた後、 'plot.getData()'を使って平滑化されたデータを得ることができます(Flotのplot-objectをplotという名前の変数に保存した場合)。その後、元のデータの代わりに平滑化されたデータを使用します。似たようなことが行われます(平滑化されたデータにアニメータープラグインを使用しています)。[https://stackoverflow.com/a/35292404/2610249] – Raidri