rapid-spreadjs 1.0.57 → 1.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +195 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +195 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/utils/echarts-all.d.ts +92 -0
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -7871,6 +7871,201 @@ const EChartsUtilsAll = {
|
|
|
7871
7871
|
};
|
|
7872
7872
|
return option;
|
|
7873
7873
|
},
|
|
7874
|
+
/**
|
|
7875
|
+
* 土工合成材料(垂直渗透系数)
|
|
7876
|
+
* @param config 折线配置
|
|
7877
|
+
* @param xDataArr x轴原始数据(二维数组)
|
|
7878
|
+
* @param yDataArr y轴原始数据(二维数组)
|
|
7879
|
+
* @returns 返回ECharts配置项
|
|
7880
|
+
*/
|
|
7881
|
+
chart370: (config, xDataArr, yDataArr, sheet) => {
|
|
7882
|
+
let lineData = JSON.parse(config.chartLinesJson);
|
|
7883
|
+
const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);
|
|
7884
|
+
// console.log(config);
|
|
7885
|
+
// 多项式阶数
|
|
7886
|
+
let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5;
|
|
7887
|
+
// 趋势线和标注点的颜色
|
|
7888
|
+
const linePointColor = lineData[0].lineColor;
|
|
7889
|
+
// 原始数据
|
|
7890
|
+
var xData = xDataArr[0]; //[0.26, 0.16, 0.22, 0.22, 0.17];
|
|
7891
|
+
var yData = yDataArr[0]; // [90, 56, 42, 28, 14];
|
|
7892
|
+
/*var xData = [];
|
|
7893
|
+
var yData = [];*/
|
|
7894
|
+
// 计算多项式回归系数(强制截距为0):y = a*x^2 + b*x
|
|
7895
|
+
var sum_x4 = 0, sum_x3 = 0, sum_x2 = 0, sum_x2y = 0, sum_xy = 0;
|
|
7896
|
+
for (var i = 0; i < xData.length; i++) {
|
|
7897
|
+
var x = xData[i];
|
|
7898
|
+
var y = yData[i];
|
|
7899
|
+
var x2 = x * x;
|
|
7900
|
+
var x3 = x2 * x;
|
|
7901
|
+
var x4 = x3 * x;
|
|
7902
|
+
sum_x4 += x4;
|
|
7903
|
+
sum_x3 += x3;
|
|
7904
|
+
sum_x2 += x2;
|
|
7905
|
+
sum_x2y += x2 * y;
|
|
7906
|
+
sum_xy += x * y;
|
|
7907
|
+
}
|
|
7908
|
+
// 解方程:a * Σx^4 + b * Σx^3 = Σx^2y ; a * Σx^3 + b * Σx^2 = Σxy
|
|
7909
|
+
var det = sum_x4 * sum_x2 - sum_x3 * sum_x3; // 行列式
|
|
7910
|
+
var a = (sum_x2y * sum_x2 - sum_xy * sum_x3) / det;
|
|
7911
|
+
var b = (sum_x4 * sum_xy - sum_x3 * sum_x2y) / det;
|
|
7912
|
+
// 计算当 y=50 时的 x 值:解方程 a*x^2 + b*x - 50 = 0
|
|
7913
|
+
var discriminant = b * b + 4 * a * 50; // 判别式 D = b^2 + 4*a*50
|
|
7914
|
+
var x50 = (-b + Math.sqrt(discriminant)) / (dxsJs * a); // 取正根(基于数据范围)
|
|
7915
|
+
// 验证根的有效性(确保在数据范围内)
|
|
7916
|
+
if (x50 < 0 || x50 > Math.max(...xData) + Math.min(...xData)) {
|
|
7917
|
+
x50 = (-b - Math.sqrt(discriminant)) / (dxsJs * a); // 尝试负根
|
|
7918
|
+
}
|
|
7919
|
+
// 生成趋势线数据点(从 x=0 开始,后推 0.16)
|
|
7920
|
+
var trendLineX = [];
|
|
7921
|
+
var trendLineY = [];
|
|
7922
|
+
var xStart = 0; // 从 x=0 开始
|
|
7923
|
+
var xEnd = Math.max(...xData) + Math.min(...xData); // 后推 0.16
|
|
7924
|
+
for (var x = xStart; x <= xEnd; x += 0.01) {
|
|
7925
|
+
trendLineX.push(x);
|
|
7926
|
+
trendLineY.push(a * x * x + b * x); // y = a*x^2 + b*x
|
|
7927
|
+
}
|
|
7928
|
+
// 判断y轴数据是否为/、‘’、null、undefined或者没有数据
|
|
7929
|
+
let yValIsAllNull = false;
|
|
7930
|
+
if (trendLineY.length == 0) {
|
|
7931
|
+
yValIsAllNull = true;
|
|
7932
|
+
}
|
|
7933
|
+
else {
|
|
7934
|
+
let noDataCount = 0;
|
|
7935
|
+
trendLineY.forEach((item) => {
|
|
7936
|
+
if (item == null || item == undefined || item == '/' || item == '') {
|
|
7937
|
+
noDataCount++;
|
|
7938
|
+
}
|
|
7939
|
+
});
|
|
7940
|
+
if (noDataCount == trendLineY.length) {
|
|
7941
|
+
yValIsAllNull = true;
|
|
7942
|
+
}
|
|
7943
|
+
}
|
|
7944
|
+
const seriesData = trendLineX.map((x, idx) => [x, trendLineY[idx]]);
|
|
7945
|
+
// 默认输出精度
|
|
7946
|
+
let outJdDzvi = 0.01;
|
|
7947
|
+
// 输出数据
|
|
7948
|
+
let outValDzvi = 0;
|
|
7949
|
+
// 设置Sheet单元格的值(输出:单值VI₅₀(mm/s))
|
|
7950
|
+
if (chartExtJson != null) {
|
|
7951
|
+
if (chartExtJson.jsDzviJd != null && chartExtJson.jsDzviJd != undefined) {
|
|
7952
|
+
outJdDzvi = chartExtJson.jsDzviJd;
|
|
7953
|
+
}
|
|
7954
|
+
outValDzvi = EChartsUtilsComm.getRound(x50, outJdDzvi);
|
|
7955
|
+
sheet.setValue(chartExtJson.jsDzvi.row, chartExtJson.jsDzvi.col, outValDzvi);
|
|
7956
|
+
}
|
|
7957
|
+
// 配置图表选项
|
|
7958
|
+
var option = {
|
|
7959
|
+
title: [
|
|
7960
|
+
/*{
|
|
7961
|
+
text: '散点图与多项式趋势线 (y = ax² + bx, 截距=0)',
|
|
7962
|
+
left: 'center',
|
|
7963
|
+
textStyle: { fontSize: 14 }
|
|
7964
|
+
},*/
|
|
7965
|
+
{
|
|
7966
|
+
show: true,
|
|
7967
|
+
text: 'V₂₀(mm/s)',
|
|
7968
|
+
left: 'center',
|
|
7969
|
+
bottom: 0,
|
|
7970
|
+
textStyle: {
|
|
7971
|
+
fontSize: 12,
|
|
7972
|
+
fontWeight: 'normal',
|
|
7973
|
+
},
|
|
7974
|
+
},
|
|
7975
|
+
],
|
|
7976
|
+
grid: {
|
|
7977
|
+
// show: true,//是否显示外边框线
|
|
7978
|
+
// borderColor: '#f00',//外边框线颜色
|
|
7979
|
+
top: 10,
|
|
7980
|
+
left: !yValIsAllNull ? 25 : 25,
|
|
7981
|
+
right: 10,
|
|
7982
|
+
bottom: 20,
|
|
7983
|
+
containLabel: true,
|
|
7984
|
+
},
|
|
7985
|
+
/*tooltip: {
|
|
7986
|
+
trigger: 'item',
|
|
7987
|
+
formatter: function (params) {
|
|
7988
|
+
if (params.seriesName === '趋势线') {
|
|
7989
|
+
return '趋势线<br/>x: ' + params.value[0].toFixed(3) + ', y: ' + params.value[1].toFixed(3);
|
|
7990
|
+
} else if (params.seriesName === '散点') {
|
|
7991
|
+
return '数据点<br/>x: ' + params.value[0].toFixed(3) + ', y: ' + params.value[1].toFixed(3);
|
|
7992
|
+
}
|
|
7993
|
+
return params.name + ': ' + params.value;
|
|
7994
|
+
}
|
|
7995
|
+
},*/
|
|
7996
|
+
xAxis: {
|
|
7997
|
+
type: 'value',
|
|
7998
|
+
name: 'X轴',
|
|
7999
|
+
min: 0, // 从 x=0 开始
|
|
8000
|
+
max: xEnd, // 扩展到后推位置
|
|
8001
|
+
axisLine: { show: true },
|
|
8002
|
+
},
|
|
8003
|
+
yAxis: {
|
|
8004
|
+
type: 'value',
|
|
8005
|
+
name: 'Δh (mm)',
|
|
8006
|
+
nameGap: !yValIsAllNull ? 30 : 5,
|
|
8007
|
+
nameRotate: 90,
|
|
8008
|
+
nameLocation: 'middle',
|
|
8009
|
+
min: 0, // 向下多显示 -10
|
|
8010
|
+
max: Math.max(...yData) + 10, // 基于数据最大值
|
|
8011
|
+
interval: 10, // 设置刻度间隔为10
|
|
8012
|
+
axisLine: { show: true },
|
|
8013
|
+
},
|
|
8014
|
+
series: [
|
|
8015
|
+
/*{
|
|
8016
|
+
name: '散点',
|
|
8017
|
+
type: 'scatter',
|
|
8018
|
+
data: xData.map((x, idx) => [x, yData[idx]]), // 散点数据
|
|
8019
|
+
symbolSize: 8,
|
|
8020
|
+
itemStyle: { color: '#5470c6' }
|
|
8021
|
+
},*/
|
|
8022
|
+
{
|
|
8023
|
+
name: '趋势线',
|
|
8024
|
+
type: 'line',
|
|
8025
|
+
data: seriesData, // 趋势线数据
|
|
8026
|
+
symbol: 'none', // 不显示数据点标记
|
|
8027
|
+
lineStyle: {
|
|
8028
|
+
color: linePointColor,
|
|
8029
|
+
// width: 2,
|
|
8030
|
+
type: 'solid', // 实线
|
|
8031
|
+
},
|
|
8032
|
+
smooth: true, // 平滑曲线
|
|
8033
|
+
},
|
|
8034
|
+
{
|
|
8035
|
+
name: 'y=50 标注点',
|
|
8036
|
+
type: 'scatter',
|
|
8037
|
+
data: [[x50, 50]], // 标注点位置
|
|
8038
|
+
symbolSize: 10,
|
|
8039
|
+
itemStyle: { color: linePointColor },
|
|
8040
|
+
label: {
|
|
8041
|
+
show: true,
|
|
8042
|
+
position: 'right',
|
|
8043
|
+
formatter: '(' + x50.toFixed(2) + ', 50)', // 显示坐标
|
|
8044
|
+
color: '#333',
|
|
8045
|
+
fontSize: 12,
|
|
8046
|
+
},
|
|
8047
|
+
markLine: {
|
|
8048
|
+
symbol: 'none', // 不显示箭头
|
|
8049
|
+
lineStyle: {
|
|
8050
|
+
color: '#333',
|
|
8051
|
+
type: 'dashed',
|
|
8052
|
+
width: 1,
|
|
8053
|
+
},
|
|
8054
|
+
data: [
|
|
8055
|
+
// 横向虚线:从(0,50)到(x50,50)
|
|
8056
|
+
[{ coord: [0, 50] }, { coord: [x50, 50] }],
|
|
8057
|
+
// 纵向虚线:从(x50,50)到(x50,-10)
|
|
8058
|
+
[{ coord: [x50, 50] }, { coord: [x50, 0] }],
|
|
8059
|
+
],
|
|
8060
|
+
},
|
|
8061
|
+
},
|
|
8062
|
+
],
|
|
8063
|
+
};
|
|
8064
|
+
// console.log('输出公式:', 'y = ' + a.toFixed(4) + 'x² + ' + b.toFixed(4) + 'x');
|
|
8065
|
+
// console.log('当 y=50 时,x 的计算公式:', 'x = [-b ± √(b² + 4a*50)] / (2a)');
|
|
8066
|
+
// console.log('计算值x =', x50.toFixed(2));
|
|
8067
|
+
return option;
|
|
8068
|
+
},
|
|
7874
8069
|
};
|
|
7875
8070
|
|
|
7876
8071
|
/**
|