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 .analyst import Analyst from .utils.directoryUtil import DirectoryUtil as dir from confBusiness import * class PitchPowerAnalyst(Analyst): """ 风电机组变桨-功率分析 """ def typeAnalyst(self): return "pitch_power" def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness): self.plot_power_pitch_angle(dataFrameMerge, outputAnalysisDir, confData) def plot_power_pitch_angle(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness): x_name = 'power' y_name = 'pitch_angle' # 按设备名分组数据 grouped = dataFrameMerge.groupby(Field_NameOfTurbine) print("self.ratedPower {}".format(confData.rated_power)) # 遍历每个设备并绘制散点图 for name, group in grouped: # sns.lmplot函数参数scatter_kws: 设置为{"s": 5}时,会出现颜色丢失问题; g = sns.lmplot(x=confData.field_power, y=confData.field_pitch_angle1, data=group, fit_reg=False, scatter_kws={"s": 5, "color": "b"}, legend=False, height=6, aspect=1.2) # g = sns.lmplot(x=confData.field_power, y=confData.field_pitch_angle1, 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.xaxis.set_major_locator(MultipleLocator(150)) ax.set_xlim(-20, confData.rated_power * (1+0.2)) ax.yaxis.set_major_locator(MultipleLocator(2)) ax.set_ylim(-1, 18) 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()