Highstock 显示所选区域的平均值
Highstock show avegrage values of selected Area
我正在使用 highstocks 库并尝试计算图上 Y 值的平均值。这个值是动态的,即每次用户放大或更改滑块时,它应该重新计算所选时间戳区域的 Y 值的平均值。
我在 fiddle here 中试过这个。但它给出了 x { timestamp} 的值,它也没有为选定的 x 范围提供 Y 值。
xAxis: {
events: {
setExtremes: function (e) {
computeAvg(e);
}
}}
您可以捕获 redraw() 事件并准备从轴获取极值的函数。下一步是遍历所有点以找到可见的点。如果是,则将此点添加到总和中。最后一步是将总和除以点数。
function computeAvg() {
var chart = this,
series = chart.series,
yAxis = chart.yAxis[0],
xAxis = chart.xAxis[0],
extremes = xAxis.getExtremes(),
min = extremes.min,
max = extremes.max,
plotLine = chart.get('avgLine'),
sum = 0,
count = 0;
Highcharts.each(series, function (serie, i) {
if(serie.name !== 'Navigator') {
Highcharts.each(serie.data, function (point, j) {
if (point.x >= min && point.x <= max) {
sum += point.y;
count++;
}
});
}
});
yAxis.removePlotLine('avgLine');
yAxis.addPlotLine({
value: (sum/count),
color: 'red',
width: 2,
id: 'avgLine'
});
}
我正在使用 highstocks 库并尝试计算图上 Y 值的平均值。这个值是动态的,即每次用户放大或更改滑块时,它应该重新计算所选时间戳区域的 Y 值的平均值。 我在 fiddle here 中试过这个。但它给出了 x { timestamp} 的值,它也没有为选定的 x 范围提供 Y 值。
xAxis: {
events: {
setExtremes: function (e) {
computeAvg(e);
}
}}
您可以捕获 redraw() 事件并准备从轴获取极值的函数。下一步是遍历所有点以找到可见的点。如果是,则将此点添加到总和中。最后一步是将总和除以点数。
function computeAvg() {
var chart = this,
series = chart.series,
yAxis = chart.yAxis[0],
xAxis = chart.xAxis[0],
extremes = xAxis.getExtremes(),
min = extremes.min,
max = extremes.max,
plotLine = chart.get('avgLine'),
sum = 0,
count = 0;
Highcharts.each(series, function (serie, i) {
if(serie.name !== 'Navigator') {
Highcharts.each(serie.data, function (point, j) {
if (point.x >= min && point.x <= max) {
sum += point.y;
count++;
}
});
}
});
yAxis.removePlotLine('avgLine');
yAxis.addPlotLine({
value: (sum/count),
color: 'red',
width: 2,
id: 'avgLine'
});
}