当前位置:首页 > JavaScript

Spc图 js实现

2026-02-02 22:02:32JavaScript

使用 JavaScript 实现 SPC 图

SPC(Statistical Process Control)图是一种用于监控过程稳定性的工具。以下是使用 JavaScript 和常见库(如 Chart.js)实现 SPC 图的步骤。

准备数据

确保数据格式正确,通常包含时间序列和对应的测量值。示例数据如下:

const data = {
    labels: ['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5'],
    values: [10, 12, 9, 11, 10.5],
};

计算控制线

计算均值(CL)、上控制限(UCL)和下控制限(LCL)。假设使用 3σ 原则:

Spc图 js实现

const mean = data.values.reduce((a, b) => a + b, 0) / data.values.length;
const stdDev = Math.sqrt(data.values.reduce((sq, n) => sq + Math.pow(n - mean, 2), 0) / data.values.length);
const ucl = mean + 3 * stdDev;
const lcl = mean - 3 * stdDev;

使用 Chart.js 绘制图表

引入 Chart.js 并配置 SPC 图:

const ctx = document.getElementById('spcChart').getContext('2d');
const chart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: data.labels,
        datasets: [
            {
                label: 'Values',
                data: data.values,
                borderColor: 'rgb(75, 192, 192)',
                tension: 0.1,
            },
            {
                label: 'UCL',
                data: Array(data.values.length).fill(ucl),
                borderColor: 'rgb(255, 99, 132)',
                borderDash: [5, 5],
                fill: false,
            },
            {
                label: 'LCL',
                data: Array(data.values.length).fill(lcl),
                borderColor: 'rgb(255, 99, 132)',
                borderDash: [5, 5],
                fill: false,
            },
            {
                label: 'CL',
                data: Array(data.values.length).fill(mean),
                borderColor: 'rgb(54, 162, 235)',
                fill: false,
            },
        ],
    },
    options: {
        responsive: true,
        scales: {
            y: {
                beginAtZero: false,
            },
        },
    },
});

自定义样式和交互

根据需要调整图表样式,例如添加提示框或点击事件:

Spc图 js实现

options: {
    plugins: {
        tooltip: {
            mode: 'index',
            intersect: false,
        },
    },
    hover: {
        mode: 'nearest',
        intersect: true,
    },
}

完整 HTML 示例

将上述代码整合到 HTML 文件中:

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <canvas id="spcChart"></canvas>
    <script>
        // 此处插入上述 JavaScript 代码
    </script>
</body>
</html>

使用 D3.js 实现高级 SPC 图

如果需要更灵活的定制,可以使用 D3.js。以下是核心步骤:

创建 SVG 容器

const svg = d3.select('body')
    .append('svg')
    .attr('width', 800)
    .attr('height', 400);

绘制数据点和控制线

// 比例尺
const xScale = d3.scaleBand()
    .domain(data.labels)
    .range([0, 800]);

const yScale = d3.scaleLinear()
    .domain([d3.min(data.values) - 2, d3.max(data.values) + 2])
    .range([400, 0]);

// 数据点
svg.selectAll('circle')
    .data(data.values)
    .enter()
    .append('circle')
    .attr('cx', (d, i) => xScale(data.labels[i]) + xScale.bandwidth() / 2)
    .attr('cy', d => yScale(d))
    .attr('r', 4);

// 控制线
svg.append('line')
    .attr('x1', 0)
    .attr('x2', 800)
    .attr('y1', yScale(ucl))
    .attr('y2', yScale(ucl))
    .style('stroke-dasharray', '5,5');

注意事项

  • 数据预处理:确保输入数据无缺失值或异常值。
  • 动态更新:如需实时更新图表,监听数据变化并调用 chart.update()
  • 移动端适配:使用 CSS 确保图表在不同设备上显示正常。

标签: Spcjs
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Ja…