JsonMarkerCharts.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <!--
  2. * @Author: your name
  3. * @Date: 2024-08-16 16:19:19
  4. * @LastEditTime: 2024-09-05 08:57:40
  5. * @LastEditors: milo-MacBook-Pro.local
  6. * @Description: In User Settings Edit
  7. * @FilePath: /performance-test/src/views/performance/components/JsonMarkerCharts.vue
  8. -->
  9. <template>
  10. <div>
  11. <div ref="chart" style="width: 100%; height: 500px"></div>
  12. </div>
  13. </template>
  14. <script>
  15. import Plotly from "plotly.js-dist";
  16. import axios from "axios";
  17. export default {
  18. data() {
  19. return {
  20. dataArr: [], // 存储好点标识的数据
  21. dataBrr: [], // 存储坏点标识的数据
  22. dataCrr: [], // 存储限电点标识的数据
  23. };
  24. },
  25. async mounted() {
  26. try {
  27. // 从服务器获取数据
  28. const response = await axios.get(
  29. // "http://localhost:3006/wof053600062/WOF053600062-WOB00021/power_curve/manual/demo.json"
  30. "http://localhost:3006/getEchartsData"
  31. );
  32. this.processData(response.data); // 处理并分类数据
  33. this.initChart(); // 初始化图表
  34. } catch (error) {
  35. console.error("Error fetching data:", error);
  36. }
  37. },
  38. methods: {
  39. processData(data) {
  40. data.forEach((item) => {
  41. switch (item.lab) {
  42. case "1":
  43. this.dataArr.push({ x: item.wind_velocity, y: item.active_power });
  44. break;
  45. case "5":
  46. this.dataBrr.push({ x: item.wind_velocity, y: item.active_power });
  47. break;
  48. case "4":
  49. this.dataCrr.push({ x: item.wind_velocity, y: item.active_power });
  50. break;
  51. default:
  52. return;
  53. }
  54. });
  55. },
  56. initChart() {
  57. const chartElement = this.$refs.chart;
  58. const trace1 = {
  59. x: this.dataArr.map((d) => d.x),
  60. y: this.dataArr.map((d) => d.y),
  61. mode: "markers",
  62. marker: { color: "green" },
  63. name: "好点",
  64. };
  65. const trace2 = {
  66. x: this.dataBrr.map((d) => d.x),
  67. y: this.dataBrr.map((d) => d.y),
  68. mode: "markers",
  69. marker: { color: "red" },
  70. name: "坏点",
  71. };
  72. const trace3 = {
  73. x: this.dataCrr.map((d) => d.x),
  74. y: this.dataCrr.map((d) => d.y),
  75. mode: "markers",
  76. marker: { color: "blue" },
  77. name: "限电点",
  78. };
  79. const data = [trace1, trace2, trace3];
  80. const layout = {
  81. title: "Scatter Plot",
  82. xaxis: {
  83. title: "Wind Velocity",
  84. gridcolor: "rgb(255,255,255)",
  85. range: [1, 10],
  86. showgrid: true,
  87. showline: false,
  88. showticklabels: true,
  89. tickcolor: "rgb(127,127,127)",
  90. ticks: "outside",
  91. zeroline: false,
  92. },
  93. yaxis: {
  94. title: "Active Power",
  95. gridcolor: "rgb(255,255,255)",
  96. showgrid: true,
  97. showline: false,
  98. showticklabels: true,
  99. tickcolor: "rgb(127,127,127)",
  100. ticks: "outside",
  101. zeroline: false,
  102. },
  103. showlegend: true,
  104. hovermode: "closest",
  105. hovermode: "closest",
  106. paper_bgcolor: "rgb(255,255,255)",
  107. // plot_bgcolor: "rgb(229,229,229)",
  108. // paper_bgcolor: "lightgray", // 设置图表外部区域背景色
  109. plot_bgcolor: "#e5ecf6", // 设置绘图区背景色
  110. };
  111. Plotly.newPlot(chartElement, data, layout);
  112. // 响应窗口大小变化
  113. window.addEventListener("resize", () => {
  114. Plotly.Plots.resize(chartElement);
  115. });
  116. // 处理图表的选择事件
  117. chartElement.on("plotly_selected", (eventData) => {
  118. if (eventData) {
  119. const selectedPoints = [];
  120. eventData.points.forEach((pt) => {
  121. selectedPoints.push({
  122. x: pt.x,
  123. y: pt.y,
  124. curveNumber: pt.curveNumber,
  125. });
  126. });
  127. console.log("Selected data:", selectedPoints);
  128. }
  129. });
  130. },
  131. },
  132. };
  133. </script>
  134. <style scoped>
  135. /* 自定义样式 */
  136. </style>