HighCharts - 具有值的缩放平均值的水平线

时间:2016-01-18 16:53:52

标签: javascript jquery highcharts

我需要显示我的2个数据集的平均值,但具有特定的特征:当用户缩放图表时,仅使用缩放区域的值重新计算平均线。 这是怎么做到的?

这是我的JS:

$(function () {

    $('#container').highcharts({
        chart: {
            type: 'scatter',
            zoomType: 'xy'
        },
        title: {
            text: 'Test'
        },
        subtitle: {
            text: ''
        },
        xAxis: {
            type: 'datetime',
            title: {
                enabled: true,
                text: 'Date'
            },
            startOnTick: true,
            endOnTick: true,
            showLastLabel: true
        },
        yAxis: {
            title: {
                text: ''
            }
        },
        legend: {
            layout: 'vertical',
            align: 'left',
            verticalAlign: 'top',
            x: 100,
            y: 70,
            floating: true,
            backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF',
            borderWidth: 1
        },
        plotOptions: {
            scatter: {
                marker: {
                    radius: 5,
                    states: {
                        hover: {
                            enabled: true,
                            lineColor: 'rgb(100,100,100)'
                        }
                    }
                },
                states: {
                    hover: {
                        marker: {
                            enabled: false
                        }
                    }
                },
                tooltip: {
                    headerFormat: '<b>{series.name}</b><br>',
                    pointFormat: '{point.x} date, {point.y} dose'
                }
            }
        },
        series: [{
            name: 'ag',
            color: 'rgba(223, 83, 83, .5)',
            data: [[1426719600000,0.9659],[1426719600000,0.8928],[1445205600000,1.6428],[1445205600000,1.4711],[1445205600000,1.4209],[1445205600000,1.9574],[1445205600000,1.1226],[1445205600000,0.8159],[1445205600000,1.0114],[1445205600000,0.9168],[1445464800000,1.175],[1445464800000,1.2219],[1445464800000,1.2641],[1445464800000,1.3006],[1445464800000,0.9375],[1445464800000,0.8966],[1445464800000,0.9374],[1445464800000,1.0811]]

        }, {
            name: 'cf',
            color: 'rgba(119, 152, 191, .5)',
            data: [[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.015],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.265],[1445378400000,2.015],[1445378400000,2.015],[1445378400000,2.015],[1445464800000,1.2254],[1445464800000,1.1065],[1445464800000,1.3482],[1445464800000,1.3015],[1445292000000,1.2297]]
        }]
    });
});

提前致谢!

1 个答案:

答案 0 :(得分:2)

这可以通过多种方式完成。我将通过chart.events.redraw告诉你如何做到这一点。无论何时进行缩放(或重置缩放),图表都会重新绘制,这为我们在计算和添加项目时提供了很好的帮助。以下是redraw事件的代码块:

这是一个实时 demo

我把它弄得很冗长所以你可以看到每一步。我们将使用getExtremes()来找出最大和最小xAxisyAxis索引是什么。由此我们确定每个系列中的点是否在这个&#34;窗口内#34;。如果他们不在窗口内,我们会忽略。如果是,那么我们将y值添加到var并将点计数器增加1.一旦完成,我们进行简单的检查以确保我们不会除以零然后计算平均值。

一旦我们得到平均值,我们就会在上面计算的平均值上绘制plotLine。首先,我们看看我们的id是否存在情节线。如果它,我们删除它。然后我们创建新的情节线。

还有一些清理工作(例如,你是否根据你的业务规则包含一个0值的情节线),但这应该让你开始。

尝试在编辑中添加代码块,因为原始答案尝试不会让它通过。仍然无法发布代码块。