当前位置:首页 > 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σ 原则:

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,
            },
        },
    },
});

自定义样式和交互

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

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。以下是核心步骤:

Spc图 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实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…