1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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()
|