pitchPowerAnalyst.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 PitchPowerAnalyst(Analyst):
  13. """
  14. 风电机组变桨-功率分析
  15. """
  16. def typeAnalyst(self):
  17. return "pitch_power"
  18. def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  19. self.plot_power_pitch_angle(dataFrameMerge, outputAnalysisDir, confData)
  20. def plot_power_pitch_angle(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  21. x_name = 'power'
  22. y_name = 'pitch_angle'
  23. # 按设备名分组数据
  24. grouped = dataFrameMerge.groupby(Field_NameOfTurbine)
  25. print("self.ratedPower {}".format(confData.rated_power))
  26. # 遍历每个设备并绘制散点图
  27. for name, group in grouped:
  28. # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题;
  29. g = sns.lmplot(x=confData.field_power, y=confData.field_pitch_angle1, data=group,
  30. fit_reg=False, scatter_kws={"s": 5, "color": "b"}, legend=False, height=6, aspect=1.2)
  31. # g = sns.lmplot(x=confData.field_power, y=confData.field_pitch_angle1, data=group,
  32. # fit_reg=False, scatter_kws={"s": 5}, legend=False, height=6, aspect=1.2)
  33. # 设置x轴和y轴的刻度
  34. for ax in g.axes.flat:
  35. ax.xaxis.set_major_locator(MultipleLocator(150))
  36. ax.set_xlim(-20, confData.rated_power * (1+0.2))
  37. ax.yaxis.set_major_locator(MultipleLocator(2))
  38. ax.set_ylim(-1, 18)
  39. ax.set_xlabel(x_name)
  40. ax.set_ylabel(y_name)
  41. # 设置x轴刻度值旋转角度为45度
  42. plt.tick_params(axis='x', rotation=45)
  43. # 调整布局和设置标题
  44. plt.tight_layout()
  45. plt.title(f'{Field_NameOfTurbine}={name}')
  46. # 保存图像并关闭绘图窗口
  47. output_file = os.path.join(outputAnalysisDir, f"{name}.png")
  48. plt.savefig(output_file, bbox_inches='tight', dpi=120)
  49. plt.close()