| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import os
- import pandas as pd
- import numpy as np
- import plotly.graph_objects as go
- from plotly.subplots import make_subplots
- import seaborn as sns
- import matplotlib.pyplot as plt
- from matplotlib.ticker import MultipleLocator
- from behavior.analyst import Analyst
- from utils.directoryUtil import DirectoryUtil as dir
- from algorithmContract.confBusiness import *
- class PitchGeneratorSpeedAnalyst(Analyst):
- """
- 风电机组变桨-发电机转速分析
- """
- def typeAnalyst(self):
- return "pitch_generator_speed"
- def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
- self.plot_speed_pitch_angle(
- dataFrameMerge, outputAnalysisDir, confData, confData.field_pitch_angle1, confData.field_gen_speed)
- def plot_speed_pitch_angle(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness, fieldPitchAngle, fieldGeneratorSpeed):
- x_name = 'generator_speed'
- y_name = 'pitch_angle'
- # 按设备名分组数据
- grouped = dataFrameMerge.groupby(Field_NameOfTurbine)
- sns.set_palette('deep')
- # 遍历每个设备并绘制散点图
- for name, group in grouped:
- groupNew = group.copy()
- if not self.common.isNone(confData.value_gen_speed_multiple):
- groupNew[fieldGeneratorSpeed] = group[fieldGeneratorSpeed] * \
- confData.value_gen_speed_multiple
- # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题;
- g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=groupNew,
- fit_reg=False, scatter_kws={"s": 5, "color": "b"}, legend=False, height=6, aspect=1.2)
- # g = sns.lmplot(x=fieldGeneratorSpeed, y=fieldPitchAngle, data=group,
- # fit_reg=False, scatter_kws={"s": 5}, legend=False, height=6, aspect=1.2)
- # 设置x轴和y轴的刻度
- for ax in g.axes.flat:
- ax.set_xlim(confData.graphSets["generatorSpeed"]["min"] if not self.common.isNone(
- confData.graphSets["generatorSpeed"]["min"]) else 1000, confData.graphSets["generatorSpeed"]["max"] if not self.common.isNone(confData.graphSets["generatorSpeed"]["max"]) else 2000)
- # 设置x轴的刻度步长
- # 假设您想要每100个单位一个刻度
- loc = MultipleLocator(confData.graphSets["generatorSpeed"]["step"] if not self.common.isNone(
- confData.graphSets["generatorSpeed"]) and not self.common.isNone(
- confData.graphSets["generatorSpeed"]["step"]) else 200)
- ax.xaxis.set_major_locator(loc) # 将定位器应用到x轴上
- ax.yaxis.set_major_locator(MultipleLocator(confData.graphSets["pitchAngle"]["step"] if not self.common.isNone(
- confData.graphSets["pitchAngle"]["step"]) else 2))
- ax.set_ylim(confData.graphSets["pitchAngle"]["min"] if not self.common.isNone(
- confData.graphSets["pitchAngle"]["min"]) else -2, confData.graphSets["pitchAngle"]["max"] if not self.common.isNone(confData.graphSets["pitchAngle"]["max"]) else 28)
- ax.set_xlabel(x_name)
- ax.set_ylabel(y_name)
- # 设置x轴刻度值旋转角度为45度
- plt.tick_params(axis='x', rotation=45)
- # 调整布局和设置标题
- plt.tight_layout()
- plt.title(f'{Field_NameOfTurbine}={name}')
- # 保存图像并关闭绘图窗口
- output_file = os.path.join(outputAnalysisDir, f"{name}.png")
- plt.savefig(output_file, bbox_inches='tight', dpi=120)
- plt.close()
|