anomalyFarmPlot.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. function getRowColorbar(row) {
  2. return Array.isArray(row?.colorbar)
  3. ? row.colorbar
  4. : Array.isArray(row?.colorBar)
  5. ? row.colorBar
  6. : [];
  7. }
  8. function getRowColorbarTitle(row) {
  9. return row?.colorbarTitle || row?.colorbartitle || "";
  10. }
  11. function pitchColorFarmKind(row) {
  12. const text = `${row?.originalLabel || ""} ${row?.label || ""}`;
  13. if (/异常/.test(text) && !/正常/.test(text)) return "异常点";
  14. if (/正常/.test(text)) return "正常数据";
  15. return row?.originalLabel || row?.label || "数据";
  16. }
  17. /**
  18. * 将变桨协调的桨距角色带图合并为正常/异常系列。
  19. * 只重组系列,不抽样任何坐标点。
  20. */
  21. export function mergePitchColorFarmRows(rows = [], useTimeData = false) {
  22. const groups = new Map();
  23. rows.forEach((row) => {
  24. const key = pitchColorFarmKind(row);
  25. const prev = groups.get(key);
  26. const xData = [...(prev?.xData || []), ...(row?.xData || [])];
  27. const yData = [...(prev?.yData || []), ...(row?.yData || [])];
  28. const colorbar = [
  29. ...(prev?.colorbar || []),
  30. ...getRowColorbar(row),
  31. ];
  32. const len = Math.min(xData.length, yData.length);
  33. groups.set(key, {
  34. ...row,
  35. label: key,
  36. originalLabel: key,
  37. extra: undefined,
  38. pointData: undefined,
  39. xData: xData.slice(0, len),
  40. yData: yData.slice(0, len),
  41. timeData: useTimeData ? xData.slice(0, len) : [],
  42. colorbar: colorbar.slice(0, len),
  43. colorbarTitle:
  44. getRowColorbarTitle(row) ||
  45. prev?.colorbarTitle ||
  46. "桨距角 (°)",
  47. turbineIndex: undefined,
  48. });
  49. });
  50. return [...groups.values()];
  51. }