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