1
This commit is contained in:
parent
bcfed5c9c8
commit
bcbed9b4da
@ -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 },
|
||||
|
||||
Loading…
Reference in New Issue
Block a user