diff --git a/public/abpm-report-template.html b/public/abpm-report-template.html index d1d1900..f88189d 100644 --- a/public/abpm-report-template.html +++ b/public/abpm-report-template.html @@ -2139,25 +2139,28 @@ const sumY = data.reduce((sum, point) => sum + point[1], 0); const sumXY = data.reduce((sum, point) => sum + point[0] * point[1], 0); const sumXX = data.reduce((sum, point) => sum + point[0] * point[0], 0); - const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX); const intercept = (sumY - slope * sumX) / n; - return { slope, intercept }; }; - + // 计算X轴最大值(向上取整到10的倍数) + function getAxisMax(arr) { + if (!arr || arr.length === 0) return 120; + const max = Math.max(...arr); + return Math.ceil(max / 10) * 10; + } // 收缩压与舒张压关系 const bpChart = echarts.init(document.getElementById('scatter-bp-relation')); const bpData = chartDataTable.map(item => [item.diastolic, item.systolic]); const bpRegression = calculateLinearRegression(bpData); - + const bpXArr = chartDataTable.map(item => item.diastolic).filter(v => v != null && !isNaN(v)); + const bpXAxisMax = getAxisMax(bpXArr); // 生成拟合线数据 const bpFitLineData = []; - for (let x = 50; x <= 120; x += 10) { + for (let x = 40; x <= bpXAxisMax; x += 10) { const y = bpRegression.slope * x + bpRegression.intercept; bpFitLineData.push([x, y]); } - const bpOption = { tooltip: { trigger: 'item', @@ -2177,8 +2180,11 @@ xAxis: { type: 'value', name: '舒张压(mmHg)', - min: 50, - max: 120, + min: 40, + max: bpXAxisMax, + interval: 10, + minorTick: { show: true, splitNumber: 5 }, + minorSplitLine: { show: false }, nameLocation: 'middle', nameGap: 30, axisLine: { show: true }, @@ -2219,19 +2225,18 @@ ] }; bpChart.setOption(bpOption); - // 心率与收缩压关系 const hrChart = echarts.init(document.getElementById('scatter-hr-relation')); const hrData = chartDataTable.map(item => [item.heartRate, item.systolic]); const hrRegression = calculateLinearRegression(hrData); - + const hrXArr = chartDataTable.map(item => item.heartRate).filter(v => v != null && !isNaN(v)); + const hrXAxisMax = getAxisMax(hrXArr); // 生成拟合线数据 const hrFitLineData = []; - for (let x = 50; x <= 120; x += 10) { + for (let x = 40; x <= hrXAxisMax; x += 10) { const y = hrRegression.slope * x + hrRegression.intercept; hrFitLineData.push([x, y]); } - const hrOption = { tooltip: { trigger: 'item', @@ -2251,8 +2256,11 @@ xAxis: { type: 'value', name: '心率(次/分)', - min: 50, - max: 120, + min: 40, + max: hrXAxisMax, + interval: 10, + minorTick: { show: true, splitNumber: 5 }, + minorSplitLine: { show: false }, nameLocation: 'middle', nameGap: 30, axisLine: { show: true },