|  | @@ -21,21 +21,12 @@ import { graphic } from "echarts/core"
 | 
	
		
			
				|  |  |  const option = ref({})
 | 
	
		
			
				|  |  |  let myChart
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -let vars = ref(['变量1','变量2'])
 | 
	
		
			
				|  |  | +let vars = ref([])
 | 
	
		
			
				|  |  |  let vals = ref([])
 | 
	
		
			
				|  |  |  let series = ref([
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  | -    name: "变量1",
 | 
	
		
			
				|  |  | -    type: "scatter",
 | 
	
		
			
				|  |  | -    data: [10, 20, 30, 40] // y轴对应数据
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  | -    name: "变量2",
 | 
	
		
			
				|  |  | -    type: "scatter",
 | 
	
		
			
				|  |  | -    data: [20, 10, 40, 30] // y轴对应数据
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |  ])
 | 
	
		
			
				|  |  | -let xdata = ref(['-0.25','0.00','0.25','0.50','0.75','1.00'])
 | 
	
		
			
				|  |  | +let xdata = ref([])
 | 
	
		
			
				|  |  |  let chartContainer = ref(null)
 | 
	
		
			
				|  |  |  let chartDom = ref()
 | 
	
		
			
				|  |  |  let convergeDate = ref([])
 | 
	
	
		
			
				|  | @@ -142,6 +133,148 @@ const getsockechart = (data) => {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 绘制所有数据曲线,X轴为行索引
 | 
	
		
			
				|  |  | +const getshuju = (dataheader, data) => {
 | 
	
		
			
				|  |  | +  console.log("散点图曲线数据1:", data);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  curvedata.value = data; 
 | 
	
		
			
				|  |  | +  series.value = [];
 | 
	
		
			
				|  |  | +  xdata.value = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  vars.value = dataheader;  // dataheader 是包含 label 和 prop 的数组
 | 
	
		
			
				|  |  | +  vals.value = data; 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 生成 x 轴数据(这里假设 x 轴是从 0 开始递增的索引)
 | 
	
		
			
				|  |  | +  for (let i = 0; i < vals.value.length; i++) {
 | 
	
		
			
				|  |  | +    xdata.value.push(i);  // x 轴数据为行索引
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 为每个字段生成一条曲线
 | 
	
		
			
				|  |  | +  for (let colIndex = 0; colIndex < vars.value.length; colIndex++) {
 | 
	
		
			
				|  |  | +    const prop = vars.value[colIndex].prop;  // 获取当前列的字段名
 | 
	
		
			
				|  |  | +    const label = vars.value[colIndex].label;  // 获取当前列的显示名称
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    let seriesData = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 遍历每一行,提取该列的数据
 | 
	
		
			
				|  |  | +    for (let rowIndex = 0; rowIndex < vals.value.length; rowIndex++) {
 | 
	
		
			
				|  |  | +      let value = vals.value[rowIndex][prop];  // 获取当前列的值
 | 
	
		
			
				|  |  | +      seriesData.push([xdata.value[rowIndex], value]);  // 添加到 seriesData
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 为每列数据生成一条曲线,使用 label 作为曲线的名字
 | 
	
		
			
				|  |  | +    series.value.push({
 | 
	
		
			
				|  |  | +      name: label,  // 使用 label 作为曲线名
 | 
	
		
			
				|  |  | +      type: "scatter",  // 散点图类型
 | 
	
		
			
				|  |  | +      data: seriesData, 
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 处理 ECharts 图表配置
 | 
	
		
			
				|  |  | +  const myChart = echarts.init(chartContainer.value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  myChart.setOption({
 | 
	
		
			
				|  |  | +    legend: {
 | 
	
		
			
				|  |  | +      data: vars.value.map(item => item.label),  // 图例数据是列名
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    xAxis: {
 | 
	
		
			
				|  |  | +      type: "category",  // 设置为 "category" 表示 x 轴为分类数据
 | 
	
		
			
				|  |  | +      data: xdata.value, // x 轴数据为索引
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    yAxis: {
 | 
	
		
			
				|  |  | +      type: "value",  // y 轴是数值型
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    series: series.value,  // 使用生成的 series 数据
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  console.log("初始化后的 series:", series.value);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const selectshuju = (listcbval,listcbval2,dataheader, data) => {
 | 
	
		
			
				|  |  | +  console.log("散点图曲线数据1:", data);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  curvedata.value = data;
 | 
	
		
			
				|  |  | +  series.value = [];
 | 
	
		
			
				|  |  | +  xdata.value = [];
 | 
	
		
			
				|  |  | +  const ydata = ref([]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  vars.value = dataheader;  // dataheader 是包含 label 和 prop 的数组
 | 
	
		
			
				|  |  | +  vals.value = data; // vals 是表格数据
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 生成 X 轴数据和 Y 轴数据
 | 
	
		
			
				|  |  | +  const xColumns = listcbval.value;  // 获取 listcbval 中选择的列,作为 X 轴
 | 
	
		
			
				|  |  | +  const yColumns = listcbval2.value;  // 获取 listcbval2 中选择的列,作为 Y 轴
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (xColumns.length === 0 || yColumns.length === 0) {
 | 
	
		
			
				|  |  | +    console.error('请先选择 X 轴和 Y 轴的变量');
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 遍历每一行数据,为每对 X 和 Y 轴选择的列生成数据
 | 
	
		
			
				|  |  | +  for (let i = 0; i < vals.value.length; i++) {
 | 
	
		
			
				|  |  | +    let xValue = [];
 | 
	
		
			
				|  |  | +    let yValue = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 对于每个 X 轴选择的列,提取该列数据
 | 
	
		
			
				|  |  | +    for (let xCol of xColumns) {
 | 
	
		
			
				|  |  | +      let xColumnData = vals.value[i][xCol];  // 获取当前行的 X 列数据
 | 
	
		
			
				|  |  | +      xValue.push(xColumnData);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 对于每个 Y 轴选择的列,提取该列数据
 | 
	
		
			
				|  |  | +    for (let yCol of yColumns) {
 | 
	
		
			
				|  |  | +      let yColumnData = vals.value[i][yCol];  // 获取当前行的 Y 列数据
 | 
	
		
			
				|  |  | +      yValue.push(yColumnData);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    xdata.value.push(xValue);
 | 
	
		
			
				|  |  | +    ydata.value.push(yValue);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 为每个 Y 轴数据列生成一条曲线
 | 
	
		
			
				|  |  | +  for (let yColIndex = 0; yColIndex < yColumns.length; yColIndex++) {
 | 
	
		
			
				|  |  | +    const label = yColumns[yColIndex];  // 使用 Y 轴列名作为曲线的标签
 | 
	
		
			
				|  |  | +    let seriesData = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    for (let rowIndex = 0; rowIndex < vals.value.length; rowIndex++) {
 | 
	
		
			
				|  |  | +      let xValues = xdata.value[rowIndex]; // 获取当前行的 X 轴数据
 | 
	
		
			
				|  |  | +      let yValue = ydata.value[rowIndex][yColIndex]; // 获取当前行的 Y 轴数据
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 将 X 和 Y 的数据组成成对的数据,传给 seriesData
 | 
	
		
			
				|  |  | +      for (let xVal of xValues) {
 | 
	
		
			
				|  |  | +        seriesData.push([xVal, yValue]);  // 每对 (X, Y) 数据
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 生成曲线的数据
 | 
	
		
			
				|  |  | +    series.value.push({
 | 
	
		
			
				|  |  | +      name: label,  // 使用列名作为曲线名
 | 
	
		
			
				|  |  | +      type: "scatter",  // 散点图类型
 | 
	
		
			
				|  |  | +      data: seriesData, 
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 处理 ECharts 图表配置
 | 
	
		
			
				|  |  | +  const myChart = echarts.init(chartContainer.value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  myChart.setOption({
 | 
	
		
			
				|  |  | +    legend: {
 | 
	
		
			
				|  |  | +      data: yColumns,  // 图例数据使用 Y 轴的列名
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    xAxis: {
 | 
	
		
			
				|  |  | +      type: "category",  // 设置为 "category" 表示 x 轴为分类数据
 | 
	
		
			
				|  |  | +      data: xdata.value, // x 轴数据为 X 轴数据
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    yAxis: {
 | 
	
		
			
				|  |  | +      type: "value",  // y 轴是数值型
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    series: series.value,  // 使用生成的 series 数据
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  console.log("初始化后的 series:", series.value);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |    option.value = {
 | 
	
		
			
				|  |  |      title: {
 | 
	
	
		
			
				|  | @@ -159,13 +292,17 @@ const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |        show: true,
 | 
	
		
			
				|  |  |        data: vars.value,
 | 
	
		
			
				|  |  |        orient: "vertical", // 图例方向 (horizontal水平, vertical垂直)
 | 
	
		
			
				|  |  | -      right: "4%",
 | 
	
		
			
				|  |  | -      top: "2%"
 | 
	
		
			
				|  |  | +      right: "0%",
 | 
	
		
			
				|  |  | +      top: "2%",
 | 
	
		
			
				|  |  | +      itemWidth: 30,
 | 
	
		
			
				|  |  | +      pageButtonItemGap: 10,
 | 
	
		
			
				|  |  | +      pageButtonPosition: 'end',
 | 
	
		
			
				|  |  | +      type: 'scroll',
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      grid: {
 | 
	
		
			
				|  |  |        show: false,
 | 
	
		
			
				|  |  |        left: "5%",
 | 
	
		
			
				|  |  | -      right: "4%",
 | 
	
		
			
				|  |  | +      right: "14%",
 | 
	
		
			
				|  |  |        bottom: "15%",
 | 
	
		
			
				|  |  |        containLabel: true
 | 
	
		
			
				|  |  |      },
 | 
	
	
		
			
				|  | @@ -179,9 +316,9 @@ const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      xAxis: [
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        type: "category",
 | 
	
		
			
				|  |  | +        type: "value",
 | 
	
		
			
				|  |  |          boundaryGap: false,
 | 
	
		
			
				|  |  | -        name: "cd",
 | 
	
		
			
				|  |  | +        name: "x/c",
 | 
	
		
			
				|  |  |          nameGap:30,
 | 
	
		
			
				|  |  |          nameTextStyle:{
 | 
	
		
			
				|  |  |            fontSize: 16,
 | 
	
	
		
			
				|  | @@ -207,7 +344,7 @@ const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      yAxis: {
 | 
	
		
			
				|  |  |        type: "value",
 | 
	
		
			
				|  |  | -      name:'-cl',
 | 
	
		
			
				|  |  | +      name:'cp',
 | 
	
		
			
				|  |  |        nameGap:40,
 | 
	
		
			
				|  |  |        nameTextStyle:{
 | 
	
		
			
				|  |  |          fontSize: 16,
 | 
	
	
		
			
				|  | @@ -231,16 +368,16 @@ const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    dataZoom: [
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        type: "inside", // 鼠标滚轮缩放
 | 
	
		
			
				|  |  | -        xAxisIndex: [0], // 针对 X 轴
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        type: "slider", // 滑动条缩放
 | 
	
		
			
				|  |  | -        xAxisIndex: [0],
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | +    // dataZoom: [
 | 
	
		
			
				|  |  | +    //   {
 | 
	
		
			
				|  |  | +    //     type: "inside", // 鼠标滚轮缩放
 | 
	
		
			
				|  |  | +    //     xAxisIndex: [0], // 针对 X 轴
 | 
	
		
			
				|  |  | +    //   },
 | 
	
		
			
				|  |  | +    //   {
 | 
	
		
			
				|  |  | +    //     type: "slider", // 滑动条缩放
 | 
	
		
			
				|  |  | +    //     xAxisIndex: [0],
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    // ],
 | 
	
		
			
				|  |  |      series: series.value
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    option.value && myChart.setOption(option.value)
 | 
	
	
		
			
				|  | @@ -249,7 +386,7 @@ const setOptionfunc = async () => {
 | 
	
		
			
				|  |  |      myChart.resize()
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -defineExpose({ getsockechart, echatinit })
 | 
	
		
			
				|  |  | +defineExpose({ getsockechart,getshuju, echatinit,selectshuju })
 | 
	
		
			
				|  |  |  </script>
 | 
	
		
			
				|  |  |  <style lang="scss" scoped>
 | 
	
		
			
				|  |  |  </style>
 |