You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HighCharts贝尔曲线中高亮偏差百分比区域(2.35%、13.5%、34%)

HighCharts 贝尔曲线(Bell Curve)示例

以下是一个简单的贝尔曲线实现代码片段:

series: [{
    name: '贝尔曲线',
    type: 'bellcurve',
    xAxis: 1,
    yAxis: 1,
    baseSeries: 1,
    zIndex: -1
}, {
    name: '数据点',
    type: 'scatter',
    data: data,
    accessibility: {
        exposeAsGroupOnly: true
    },
    marker: {
        radius: 1.5
    }
}]

贝尔曲线示例图


技术实现咨询

如何通过HighCharts高亮展示贝尔曲线中的偏差百分比区域(对应2.35%、13.5%、34%的分布区间),参考下图的高亮效果:

偏差区域高亮示例图


实现方案

要实现偏差区间高亮,核心是利用HighCharts的坐标轴区间带(plotBands),结合正态分布的标准差区间计算对应x轴范围,给不同区间设置差异化背景色。

1. 计算正态分布关键参数

先基于散点数据计算均值(μ)和标准差(σ),对应区间规则:

  • 34%区间:μ±1σ(中间两侧各占34%)
  • 13.5%区间:μ±1σ到μ±2σ之间(两侧各占13.5%)
  • 2.35%区间:μ±2σ到μ±3σ之间(两侧各占2.35%)

用JS函数计算参数:

// 计算均值
function getMean(data) {
    const sum = data.reduce((acc, point) => acc + point[0], 0);
    return sum / data.length;
}

// 计算标准差
function getStdDev(data, mean) {
    const squaredDiffSum = data.reduce((acc, point) => acc + Math.pow(point[0] - mean, 2), 0);
    return Math.sqrt(squaredDiffSum / data.length);
}

// 假设你的散点数据为data数组
const mean = getMean(data);
const stdDev = getStdDev(data, mean);

2. 配置x轴区间高亮

在xAxis配置中添加plotBands,给每个区间设置颜色和标签:

xAxis: {
    // 保留原有x轴配置
    plotBands: [
        // 左侧2.35%区间
        {
            from: mean - 3 * stdDev,
            to: mean - 2 * stdDev,
            color: 'rgba(255, 107, 107, 0.2)',
            label: { text: '2.35%', align: 'center' }
        },
        // 左侧13.5%区间
        {
            from: mean - 2 * stdDev,
            to: mean - 1 * stdDev,
            color: 'rgba(255, 193, 7, 0.2)',
            label: { text: '13.5%', align: 'center' }
        },
        // 左侧34%区间
        {
            from: mean - 1 * stdDev,
            to: mean,
            color: 'rgba(40, 167, 69, 0.2)',
            label: { text: '34%', align: 'center' }
        },
        // 右侧34%区间
        {
            from: mean,
            to: mean + 1 * stdDev,
            color: 'rgba(40, 167, 69, 0.2)',
            label: { text: '34%', align: 'center' }
        },
        // 右侧13.5%区间
        {
            from: mean + 1 * stdDev,
            to: mean + 2 * stdDev,
            color: 'rgba(255, 193, 7, 0.2)',
            label: { text: '13.5%', align: 'center' }
        },
        // 右侧2.35%区间
        {
            from: mean + 2 * stdDev,
            to: mean + 3 * stdDev,
            color: 'rgba(255, 107, 107, 0.2)',
            label: { text: '2.35%', align: 'center' }
        }
    ]
}

3. 进阶优化(可选)

如果需要高亮区域贴合贝尔曲线轮廓而非整个x轴区间,可以新增area类型系列,基于贝尔曲线的y值绘制填充区域:

series: [
    // 原有贝尔曲线和散点系列
    {
        name: '左侧2.35%高亮',
        type: 'area',
        data: bellCurveData.filter(point => point.x >= mean-3*stdDev && point.x <= mean-2*stdDev),
        color: 'rgba(255, 107, 107, 0.2)',
        zIndex: -2
    },
    // 其他区间的area系列同理...
]

内容的提问来源于stack exchange,提问作者ihtus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:45:07