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 Field_NameOfTurbine,Field_GeneratorTorque, ConfBusiness class GeneratorSpeedTorqueAnalyst(Analyst): """ 风电机组发电机转速-转矩分析 """ def typeAnalyst(self): return "speed_torque" def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness): self.create_and_save_plots( dataFrameMerge, outputAnalysisDir, confData, confData.field_gen_speed, confData.field_power) def create_and_save_plots(self, dataFrame: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness, fieldGeneratorSpeed, field_Active_Power): x_name = 'generator_speed' y_name = 'generator_torque' grouped = dataFrame.groupby(Field_NameOfTurbine) 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}时,会出现颜色丢失问题;改为={"s": 5, "color": "b"}后,则造成图形风格不统一问题; g = sns.lmplot(x=fieldGeneratorSpeed, y=Field_GeneratorTorque, data=groupNew, fit_reg=False, scatter_kws={ "s": 5, "color": "b"}, legend=False, height=6, aspect=1.2) # g = sns.lmplot(x=fieldGeneratorSpeed, y=Field_GeneratorTorque, data=group, fit_reg=False, scatter_kws={ # "s": 5}, legend=False, height=6, aspect=1.2) for ax in g.axes.flat: # ax.xaxis.set_major_locator(MultipleLocator(100)) ax.set_xlim(confData.value_gen_speed_min, confData.value_gen_speed_max) # 设置x轴的刻度步长 # 假设您想要每100个单位一个刻度 if not self.common.isNone(confData.value_gen_speed_step): loc = MultipleLocator(confData.value_gen_speed_step) # 创建每100个单位一个刻度的定位器 ax.xaxis.set_major_locator(loc) # 将定位器应用到x轴上 ax.set_xlabel(x_name) ax.set_ylabel(y_name) 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()