## 4. 各图表数据格式与示例 ### 4.1 A2 各机组风速分布(阶梯折线图) **用途**:对比各机组风速概率密度曲线。 **X 轴**:风速 (m/s),当前前端固定 `0 ~ 25`,步长 `0.5`。 **Y 轴**:概率密度,当前前端固定 `0 ~ 0.24`。 #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | ------------------------ | ------ | ---- | ------------------------- | | `turbines` | array | 是 | 机组列表 | | `turbines[].engineId` | string | 是 | 机组编号,用于图例 | | `turbines[].displayName` | string | 否 | 展示名,缺省用 `engineId` | | `turbines[].color` | string | 否 | 折线颜色,缺省前端色板 | | `turbines[].points` | array | 是 | `[风速, 概率密度]` 二维点 | | `points[][0]` | number | 是 | 风速 m/s | | `points[][1]` | number | 是 | 概率密度 | #### 示例 ```json { "windSpeedDistribution": { "xAxis": { "min": 0, "max": 25, "interval": 5, "name": "风速 (m/s)" }, "yAxis": { "min": 0, "max": 0.24, "interval": 0.05, "name": "概率密度" }, "turbines": [ { "engineId": "JH03", "displayName": "JH03", "points": [ [0.0, 0.012], [0.5, 0.028], [1.0, 0.065], [3.0, 0.135], [5.0, 0.115], [7.0, 0.042] ] }, { "engineId": "JH04", "displayName": "JH04", "points": [ [0.0, 0.01], [0.5, 0.025], [3.0, 0.128], [5.5, 0.108] ] } ] } } ``` #### 映射到 ECharts series ```javascript // 每个 turbine 对应一条 series { name: turbine.engineId, type: "line", step: "middle", data: turbine.points // [[x,y], ...] } ``` --- ### 4.2 风向玫瑰图(极坐标堆叠柱状图) **用途**:每台机组一张玫瑰图,展示 16 方位 × 5 个风速段的频次。 **方位**:`N → NE → E → SE → S → SW → W → NW`(中间空槽位用于留白,共 16 格)。 **风速段**(固定顺序,与前端 `ROSE_SPEED_BANDS` 一致): 1. `0~3 m/s` 2. `3~6 m/s` 3. `6~9 m/s` 4. `9~12 m/s` 5. `>12 m/s` #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | --------------------- | -------- | ---- | ------------------------------- | | `speedBands` | string[] | 否 | 风速段名称,默认见上 | | `directions` | string[] | 否 | 16 方位标签,默认含空字符串间隔 | | `turbines` | array | 是 | 每机组一组数据 | | `turbines[].engineId` | string | 是 | 机组编号(卡片标题) | | `turbines[].bands` | array | 是 | 长度 5,每个风速段一条 | | `bands[].band` | string | 是 | 风速段名称 | | `bands[].values` | number[] | 是 | 长度 16,各方位频次/占比 | #### 示例(单机组) ```json { "windRose": { "speedBands": ["0~3 m/s", "3~6 m/s", "6~9 m/s", "9~12 m/s", ">12 m/s"], "directions": [ "N", "", "NE", "", "E", "", "SE", "", "S", "", "SW", "", "W", "", "NW", "" ], "turbines": [ { "engineId": "JH03", "bands": [ { "band": "0~3 m/s", "values": [ 2.1, 1.8, 2.3, 1.5, 0.9, 0.6, 0.5, 0.4, 0.5, 0.6, 0.8, 1.2, 1.9, 2.0, 2.2, 1.7 ] }, { "band": "3~6 m/s", "values": [ 1.9, 1.6, 2.0, 1.3, 0.8, 0.5, 0.4, 0.3, 0.4, 0.5, 0.7, 1.0, 1.7, 1.8, 2.0, 1.5 ] }, { "band": "6~9 m/s", "values": [ 1.2, 1.0, 1.5, 0.9, 0.6, 0.4, 0.3, 0.2, 0.3, 0.4, 0.5, 0.8, 1.2, 1.3, 1.5, 1.1 ] }, { "band": "9~12 m/s", "values": [ 0.5, 0.4, 0.6, 0.3, 0.2, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.5, 0.5, 0.6, 0.4 ] }, { "band": ">12 m/s", "values": [ 0.2, 0.1, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2 ] } ] }, { "engineId": "JH04", "bands": [] } ] } } ``` --- ### 4.3 风电场布局与机组日尺度发电量损失图(散点图 1) **用途**:平面坐标展示机组位置,颜色/大小编码发电量损失百分比。 **点结构**:`[东西坐标(米), 南北坐标(米), 发电量损失(%)]` #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | ---------------------- | ------ | ---- | -------------------------------------- | | `title` | string | 否 | 图表标题 | | `xAxis` | object | 否 | `{ min, max, name }` 东西方向 | | `yAxis` | object | 否 | `{ min, max, name }` 南北方向 | | `visualMap` | object | 否 | `{ min, max }` 损失色带范围,默认 0~85 | | `points` | array | 是 | 散点列表 | | `points[].engineId` | string | 是 | 机组 ID(点标签) | | `points[].east` | number | 是 | 东西坐标(米) | | `points[].north` | number | 是 | 南北坐标(米) | | `points[].lossPercent` | number | 是 | 发电量损失 % | #### 示例 ```json { "layoutLossScatter": { "title": "风电场布局与机组日尺度发电量损失图(2024-04-28)", "xAxis": { "min": 333200, "max": 333450, "name": "东西方向坐标(米)" }, "yAxis": { "min": 4172500, "max": 4174000, "name": "南北方向坐标(米)" }, "visualMap": { "min": 0, "max": 85 }, "points": [ { "engineId": "L9Xcm4u0", "east": 333330, "north": 4173350, "lossPercent": 7.8 }, { "engineId": "7xKAWgZW", "east": 333410, "north": 4172980, "lossPercent": 84.7 }, { "engineId": "3jyH154U", "east": 333270, "north": 4172520, "lossPercent": 0.4 } ] } } ``` #### ECharts 数据格式 ```javascript { name: "L9Xcm4u0", value: [333330, 4173350, 7.8] } ``` --- ### 4.4 日尺度损失与可信度散点图(散点图 2) **用途**:损失 % vs 可信度 %,用于区分高损失高/低可信区域。 **点结构**:`[发电量损失(%), 结果可信度(%)]` #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | ---------------------------- | ------ | ---- | ------------------------------- | | `title` | string | 否 | 图表标题 | | `xAxis` | object | 否 | 损失轴 `{ min: 0, max: 90 }` | | `yAxis` | object | 否 | 可信度轴 `{ min: 65, max: 98 }` | | `points` | array | 是 | 散点列表 | | `points[].engineId` | string | 是 | 机组 ID | | `points[].lossPercent` | number | 是 | 发电量损失 % | | `points[].confidencePercent` | number | 是 | 结果可信度 % | | `points[].color` | string | 否 | 点颜色(如 `#4CAF50` 高可信) | #### 示例 ```json { "lossConfidenceScatter": { "title": "日尺度损失与可信度散点图(2024-04-28)", "points": [ { "engineId": "L9Xcm4u0", "lossPercent": 7.8, "confidencePercent": 92, "color": "#C0C0C0" }, { "engineId": "7xKAWgZW", "lossPercent": 84.7, "confidencePercent": 87, "color": "#E85D5D" }, { "engineId": "3jyH154U", "lossPercent": 0.4, "confidencePercent": 67, "color": "#E85D5D" }, { "engineId": "3dORuyAV", "lossPercent": 3.4, "confidencePercent": 95, "color": "#4CAF50" } ] } } ``` #### ECharts 数据格式 ```javascript { name: "L9Xcm4u0", value: [7.8, 92], itemStyle: { color: "#C0C0C0" } } ``` --- ### 4.5 各机组日尺度发电量损失与相对 DEL 指标(双柱图) **用途**:每台机组两根柱:发电量损失 %、相对 DEL 指标 %。 #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | --------------------- | ------ | ---- | --------------------------------- | | `title` | string | 否 | 图表标题 | | `items` | array | 是 | 机组柱数据 | | `items[].engineId` | string | 是 | X 轴类目 | | `items[].lossPercent` | number | 是 | 发电量损失 %(左 Y 轴,0~100) | | `items[].delPercent` | number | 是 | 相对 DEL 指标 %(右 Y 轴,0~400) | #### 示例 ```json { "lossDelBar": { "title": "各机组日尺度发电量损失与相对DEL指标(2024-04-28)", "items": [ { "engineId": "L9Xcm4u0", "lossPercent": 7.8, "delPercent": 50.8 }, { "engineId": "o23d6LBB", "lossPercent": 7.5, "delPercent": 54.6 }, { "engineId": "I7EJ4nPt", "lossPercent": 59.6, "delPercent": 348.4 }, { "engineId": "7xKAWgZW", "lossPercent": 84.7, "delPercent": 324.4 } ] } } ``` --- ### 4.6 尾流影响评估表格 **用途**:分页表格,展示单机尾流诊断结果与缩略图。 #### 字段说明 | 字段 | 类型 | 必填 | 说明 | | ------------ | ------ | ---- | --------------------------------------------------- | | `name` | string | 是 | 风机名称(展示用) | | `engineId` | string | 否 | 风机 ID | | `affected` | string | 是 | `"yes"` / `"no"` 或后端 `isWake` 映射 `1→yes, 0→no` | | `turbulence` | number | 是 | 附加湍流强度 | | `loss` | number | 是 | 尾流速度损耗 | | `confidence` | string | 是 | 置信度展示,如 `"90%"` | | `image` | string | 是 | 缩略图 URL | #### 示例 ```json { "turbineTable": [ { "name": "风机01", "engineId": "JH03", "affected": "yes", "turbulence": 80, "loss": 2, "confidence": "90%", "image": "https://cdn.example.com/wake/JH03-thumb.png" }, { "name": "风机02", "engineId": "JH04", "affected": "no", "turbulence": 90, "loss": 1, "confidence": "80%", "image": "https://cdn.example.com/wake/JH04-thumb.png" } ] } ``` #### 从 `WakeTurbineVO` 映射示例 ```javascript { name: item.engineId, affected: item.isWake === 1 ? "yes" : "no", turbulence: item.turbulenceIntensity, loss: item.velocityDeficit, confidence: `${Math.round(item.confidentLevel * 100)}%`, image: item.wakeTurbinePath } ``` ---