【问题标题】:Drawing a regression line in Highcharts using mx + b使用 mx + b 在 Highcharts 中绘制回归线
【发布时间】:2015-11-05 21:36:21
【问题描述】:

我正在尝试根据 mx+b(斜率 + y 截距)公式在 Highcharts 中绘制线性回归线,并使用 regression-js 生成回归公式。

我遇到的问题是,Highcharts 似乎想要[[x1, y1], [x2, y2]] 格式的回归线,但我不一定能从斜率和 y 截距中得到起点和终点。

所以: 是否可以根据斜率在 Highcharts 中画一条线?或者是否有一个 JS 回归库可以根据我下面的数据数组输出 [[x1, y1], [x2, y2]] 格式的行?

我现在的工作:

data = [[11.6,14.7],[12.2,15.9],[10.7,14.8],[14,11.7],[12.5,13.2],[10,11.3],[10.1,11],[13.5,19.1]];

slope = regression('linear', data); // result: slope.equation = [slope, y-intercept]

$('#scatter').highcharts({
    chart: {
        type: 'scatter',
        zoomType: 'xy'
    },
    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} cm, {point.y} kg'
            }
        }
    },
    series: [
        {
            type: 'line',
            name: 'Regression Line',
            data: [[0, 0], [5, 4.51]], // You see the problem here: I've got mx + b and this wants x1 y1 x2 y2
            marker: {
                enabled: false
            },
            states: {
                hover: {
                    lineWidth: 0
                }
            },
            enableMouseTracking: false
        },
        {
        name: 'Water Temperature vs. Air Temperature',
        color: 'rgba(119, 152, 191, .5)',
        data: data
    }]
});

【问题讨论】:

    标签: javascript highcharts statistics linear-regression


    【解决方案1】:

    很好的问题。我是这样做的:

    var data = [[11.6,14.7],[12.2,15.9],[10.7,14.8],[14,11.7],[12.5,13.2],[10,11.3],[10.1,11],[13.5,19.1]];
    
    var ymxb = regression('linear', data); 
    
    // get the slope and x intercept from the equation
    var m = ymxb.equation[0], b = ymxb.equation[1];
    
    // create array of x values
    var xs = [];
    data.forEach(function(d){
        xs.push(d[0]);
    });
    
    // get the max and min values of x, and calculate 
    // the corresponding y value using that x, m, and b
    var x0 = Math.min.apply(null, xs), 
        y0 = m*x0 + b;
    var xf = Math.max.apply(null, xs), 
        yf = m*xf + b;
    
    ...
    
    // that gives you your two coordinates
    series: [
        {
            type: 'line',
            name: 'Regression Line',
            data: [[x0, y0], [xf, yf]],
    
    ...
    

    结果:

    JSFiddle

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 2018-07-10
      • 2017-02-05
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2018-09-04
      相关资源
      最近更新 更多