anomalyFarmPlot.mjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. xData: xData.slice(0, len),
  38. yData: yData.slice(0, len),
  39. timeData: useTimeData ? xData.slice(0, len) : [],
  40. colorbar: colorbar.slice(0, len),
  41. colorbarTitle:
  42. getRowColorbarTitle(row) ||
  43. prev?.colorbarTitle ||
  44. "桨距角 (°)",
  45. turbineIndex: undefined,
  46. });
  47. });
  48. return [...groups.values()];
  49. }