pitchGeneratorSpeedAnalyst.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import os
  2. import pandas as pd
  3. import numpy as np
  4. import plotly.graph_objects as go
  5. from plotly.subplots import make_subplots
  6. import seaborn as sns
  7. import matplotlib.pyplot as plt
  8. from matplotlib.ticker import MultipleLocator
  9. from behavior.analyst import Analyst
  10. from utils.directoryUtil import DirectoryUtil as dir
  11. from algorithmContract.confBusiness import *
  12. class PitchGeneratorSpeedAnalyst(Analyst):
  13. """
  14. 风电机组变桨-发电机转速分析
  15. """
  16. def typeAnalyst(self):
  17. return "pitch_generator_speed"
  18. def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  19. self.plot_speed_pitch_angle(
  20. dataFrameMerge, outputAnalysisDir, confData, confData.field_pitch_angle1, confData.field_gen_speed)
  21. def plot_speed_pitch_angle(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness, fieldPitchAngle, fieldGeneratorSpeed):
  22. x_name = 'generator_speed'
  23. y_name = 'pitch_angle'
  24. # 按设备名分组数据
  25. grouped = dataFrameMerge.groupby(Field_NameOfTurbine)
  26. sns.set_palette('deep')
  27. # 遍历每个设备并绘制散点图
  28. for name, group in grouped:
  29. groupNew = group.copy()
  30. if not self.common.isNone(confData.value_gen_speed_multiple):
  31. groupNew[fieldGeneratorSpeed] = group[fieldGeneratorSpeed] * \
  32. confData.value_gen_speed_multiple
  33. # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题;
  34. g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=groupNew,
  35. fit_reg=False, scatter_kws={"s": 5, "color": "b"}, legend=False, height=6, aspect=1.2)
  36. # g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=group,
  37. # fit_reg=False, scatter_kws={"s": 5}, legend=False, height=6, aspect=1.2)
  38. # 设置x轴和y轴的刻度
  39. for ax in g.axes.flat:
  40. ax.set_xlim(confData.graphSets["generatorSpeed"]["min"] if not self.common.isNone(
  41. confData.graphSets["generatorSpeed"]["min"]) else 1000, confData.graphSets["generatorSpeed"]["max"] if not self.common.isNone(confData.graphSets["generatorSpeed"]["max"]) else 2000)
  42. # 设置x轴的刻度步长
  43. # 假设您想要每100个单位一个刻度
  44. loc = MultipleLocator(confData.graphSets["generatorSpeed"]["step"] if not self.common.isNone(
  45. confData.graphSets["generatorSpeed"]) and not self.common.isNone(
  46. confData.graphSets["generatorSpeed"]["step"]) else 200)
  47. ax.xaxis.set_major_locator(loc) # 将定位器应用到x轴上
  48. ax.yaxis.set_major_locator(MultipleLocator(confData.graphSets["pitchAngle"]["step"] if not self.common.isNone(
  49. confData.graphSets["pitchAngle"]["step"]) else 2))
  50. ax.set_ylim(confData.graphSets["pitchAngle"]["min"] if not self.common.isNone(
  51. confData.graphSets["pitchAngle"]["min"]) else -2, confData.graphSets["pitchAngle"]["max"] if not self.common.isNone(confData.graphSets["pitchAngle"]["max"]) else 28)
  52. ax.set_xlabel(x_name)
  53. ax.set_ylabel(y_name)
  54. # 设置x轴刻度值旋转角度为45度
  55. plt.tick_params(axis='x', rotation=45)
  56. # 调整布局和设置标题
  57. plt.tight_layout()
  58. plt.title(f'{Field_NameOfTurbine}={name}')
  59. # 保存图像并关闭绘图窗口
  60. output_file = os.path.join(outputAnalysisDir, f"{name}.png")
  61. plt.savefig(output_file, bbox_inches='tight', dpi=120)
  62. plt.close()