pitchGeneratorSpeedAnalyst.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 .analyst import Analyst
  10. from .utils.directoryUtil import DirectoryUtil as dir
  11. from 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]*confData.value_gen_speed_multiple
  32. # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题;
  33. g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=groupNew,
  34. fit_reg=False, scatter_kws={"s": 5, "color": "b"}, legend=False, height=6, aspect=1.2)
  35. # g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=group,
  36. # fit_reg=False, scatter_kws={"s": 5}, legend=False, height=6, aspect=1.2)
  37. # 设置x轴和y轴的刻度
  38. for ax in g.axes.flat:
  39. # ax.xaxis.set_major_locator(MultipleLocator(100))
  40. ax.set_xlim(confData.value_gen_speed_min, confData.value_gen_speed_max)
  41. # 设置x轴的刻度步长
  42. # 假设您想要每100个单位一个刻度
  43. if not self.common.isNone(confData.value_gen_speed_step):
  44. loc = MultipleLocator(confData.value_gen_speed_step) # 创建每100个单位一个刻度的定位器
  45. ax.xaxis.set_major_locator(loc) # 将定位器应用到x轴上
  46. ax.yaxis.set_major_locator(MultipleLocator(2))
  47. # ax.set_ylim(-1, 18)
  48. ax.set_xlabel(x_name)
  49. ax.set_ylabel(y_name)
  50. # 设置x轴刻度值旋转角度为45度
  51. plt.tick_params(axis='x', rotation=45)
  52. # 调整布局和设置标题
  53. plt.tight_layout()
  54. plt.title(f'{Field_NameOfTurbine}={name}')
  55. # 保存图像并关闭绘图窗口
  56. output_file = os.path.join(outputAnalysisDir, f"{name}.png")
  57. plt.savefig(output_file, bbox_inches='tight', dpi=120)
  58. plt.close()