generatorSpeedTorqueAnalyst.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 Field_NameOfTurbine,Field_GeneratorTorque, ConfBusiness
  12. class GeneratorSpeedTorqueAnalyst(Analyst):
  13. """
  14. 风电机组发电机转速-转矩分析
  15. """
  16. def typeAnalyst(self):
  17. return "speed_torque"
  18. def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  19. self.create_and_save_plots(
  20. dataFrameMerge, outputAnalysisDir, confData, confData.field_gen_speed, confData.field_power)
  21. def create_and_save_plots(self, dataFrame: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness, fieldGeneratorSpeed, field_Active_Power):
  22. x_name = 'generator_speed'
  23. y_name = 'generator_torque'
  24. grouped = dataFrame.groupby(Field_NameOfTurbine)
  25. for name, group in grouped:
  26. groupNew=group.copy()
  27. if not self.common.isNone(confData.value_gen_speed_multiple):
  28. groupNew[fieldGeneratorSpeed]=group[fieldGeneratorSpeed]*confData.value_gen_speed_multiple
  29. # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题;改为={"s": 5, "color": "b"}后,则造成图形风格不统一问题;
  30. g = sns.lmplot(x=fieldGeneratorSpeed, y=Field_GeneratorTorque, data=groupNew, fit_reg=False, scatter_kws={
  31. "s": 5, "color": "b"}, legend=False, height=6, aspect=1.2)
  32. # g = sns.lmplot(x=fieldGeneratorSpeed, y=Field_GeneratorTorque, data=group, fit_reg=False, scatter_kws={
  33. # "s": 5}, legend=False, height=6, aspect=1.2)
  34. for ax in g.axes.flat:
  35. # ax.xaxis.set_major_locator(MultipleLocator(100))
  36. ax.set_xlim(confData.value_gen_speed_min,
  37. confData.value_gen_speed_max)
  38. # 设置x轴的刻度步长
  39. # 假设您想要每100个单位一个刻度
  40. if not self.common.isNone(confData.value_gen_speed_step):
  41. loc = MultipleLocator(confData.value_gen_speed_step) # 创建每100个单位一个刻度的定位器
  42. ax.xaxis.set_major_locator(loc) # 将定位器应用到x轴上
  43. ax.set_xlabel(x_name)
  44. ax.set_ylabel(y_name)
  45. plt.tight_layout()
  46. plt.title(f'{Field_NameOfTurbine}={name}')
  47. # 保存图片到指定路径
  48. output_file = os.path.join(outputAnalysisDir, f"{name}.png")
  49. plt.savefig(output_file, bbox_inches='tight', dpi=120)
  50. plt.close()