diff --git a/src/assets/images/arrow.png b/src/assets/images/arrow.png new file mode 100644 index 0000000..9e49347 Binary files /dev/null and b/src/assets/images/arrow.png differ diff --git a/src/components/rtReport/index.vue b/src/components/rtReport/index.vue index 64c91aa..02997b2 100644 --- a/src/components/rtReport/index.vue +++ b/src/components/rtReport/index.vue @@ -136,6 +136,7 @@ import { productTypeMap } from "@/lib/variateMap"; import { truthFunVal, productSubTypeVal } from "@/lib/contract"; import * as turf from "@turf/turf"; +import arrow from "@/assets/images/arrow.png" export default { props: { realRes: { @@ -174,7 +175,7 @@ export default { tDatas: null, midValue: 10, erExpression: null, - erR2: "r² = 0.037207", + erR2: "", }; }, created() { @@ -313,13 +314,31 @@ export default { } } }, + calculateR2(y, yHat) { + // y:真实值 yhat:预测值 + // 计算观测值的平均值 + const meanY = y.reduce((acc, val) => acc + val, 0) / y.length; + // 计算回归平方和(SSR) + const totalSumOfSquares = yHat.map(val => Math.pow(val - meanY, 2)).reduce((acc, val) => acc + val, 0); + // 计算残差平方和(SSE) + const residualSum = y.map((val, index) => Math.pow(val - yHat[index], 2)).reduce((acc, val) => acc + val, 0); + // 计算回归平方和(SST) + const residualSumOfSquares = totalSumOfSquares + residualSum; + // 计算 R2 决定系数 + const rSquared = 1 - (residualSum / residualSumOfSquares); + return rSquared; + }, drawPie(errorVala) { let data = []; let xArr = []; + const observedValues = []; + const predictedValues = []; for (let i in errorVala) { const a = [errorVala[i].cre_imageValue, errorVala[i].cre_deviation]; xArr.push(errorVala[i].cre_imageValue); data.push(a); + observedValues.push(errorVala[i].cre_deviation); + predictedValues.push(errorVala[i].cre_imageValue); } // const x_limit = Math.abs(Math.max(...xArr) / xArr.length); //多项式回归 @@ -328,6 +347,8 @@ export default { }).reduce((acc, curr) => acc + curr, 0); let rmseValue = "RMSE = "+ Math.sqrt(wcpf/data.length); let myRegression = this.echartRegression("polynomial", data, 1); + // 计算 R2 决定系数 + this.erR2 = "r² = " + this.calculateR2(observedValues, predictedValues); var option = { title: { text: this.pdSubTypeName + "误差结果图", @@ -416,10 +437,16 @@ export default { { name: "r2", icon: "circle", + itemStyle: { + color:"#FFF" + } }, { name:"RMSE", icon: "circle", + itemStyle: { + color:"#FFF" + } } ], formatter: (name) => { @@ -600,7 +627,8 @@ export default { }, { // symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAjVJREFUeF7tmM1JAwEYBb90Yg1WYGeWYhd69OTVEjxagldlJeAfibtkIBOYgARk8/ZlJm/jupseKgI7VZvKTEJkH4KEJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREaAq3M9M8+nxrWQUwl+vf59Zl5m5mFm7vfPy+82PRKyCdfRg3/Df9tLWQQtP69rTpWQNZTWHfPfGp6+CTp4aVuE3M7MzbpzdtQRAlsYHry0LUIeE3LWD9qPS1tCzuri8+R/hNzNzNX5e118A+ySdfEkJG8A+1KXvJ+Lr9GfvTKF3RjKhPSvE5kQpE536ghGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLuQDLNIwmfEn5ZUAAAAASUVORK5CYII=", - symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAv0lEQVR4nO3UsUmEQRCA0U801cASxECwAUOrMLEly7CGM7OAM/ZSCxBzA0ERLjqQQ3G5X//3YLPdYWZ2dgMAAAAAAAAAAIBd25/hDVxUR9Xzdw/OsVmn1bK6qk6qt+ppAnlN0mX1vrFeqtvqujr+Kum9CRe1HBT3sDrbsue+WlR31WpQHr9q8/Z3tR6rm8/CDibcrIdBcf/lZI3y4z9rypM12mo9OYv1JG01x2a9Vudzf14AAAAAAAAAAAD8RdUHTdhBNENzGoYAAAAASUVORK5CYII=", + // symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAv0lEQVR4nO3UsUmEQRCA0U801cASxECwAUOrMLEly7CGM7OAM/ZSCxBzA0ERLjqQQ3G5X//3YLPdYWZ2dgMAAAAAAAAAAIBd25/hDVxUR9Xzdw/OsVmn1bK6qk6qt+ppAnlN0mX1vrFeqtvqujr+Kum9CRe1HBT3sDrbsue+WlR31WpQHr9q8/Z3tR6rm8/CDibcrIdBcf/lZI3y4z9rypM12mo9OYv1JG01x2a9Vudzf14AAAAAAAAAAAD8RdUHTdhBNENzGoYAAAAASUVORK5CYII=", + symbol:"image://" + arrow, symbolRotate: (number, params) => { console.log(number, params); return bearingArr[params.dataIndex]; diff --git a/vue.config.js b/vue.config.js index 00e84bb..04e9991 100644 --- a/vue.config.js +++ b/vue.config.js @@ -35,7 +35,8 @@ module.exports = { } }, [process.env.VUE_APP_REALITY_API]: { - target: "https://124.16.188.131:28092/microwave", + target: "http://192.168.88.199:18092/microwave", + // target: "https://124.16.188.131:28092/microwave", // target: "http://192.168.1.227:18092/microwave", changeOrigin: true, pathRewrite: { @@ -43,7 +44,8 @@ module.exports = { } }, [process.env.VUE_APP_FILE_API]: { - target: "https://124.16.188.131:28093/file", + target: "http://192.168.88.199:18093/file", + // target: "https://124.16.188.131:28093/file", // target: "http://192.168.1.227:18093/file", changeOrigin: true, pathRewrite: {