| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import os
- import pandas as pd
- import numpy as np
- import plotly.graph_objects as go
- from plotly.subplots import make_subplots
- import plotly.express as px
- from behavior.analyst import Analyst
- from utils.directoryUtil import DirectoryUtil as dir
- from algorithmContract.confBusiness import *
- class WindSpeedAnalyst(Analyst):
- def typeAnalyst(self):
- return "wind_speed"
- def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
- self.drawWindSpeedAnalysis(dataFrameMerge, outputAnalysisDir, confData)
- def drawWindSpeedAnalysis(self, dataFrameMerge: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness):
- # 检查所需列是否存在
- required_columns = {Field_NameOfTurbine,confData.field_wind_speed}
- if not required_columns.issubset(dataFrameMerge.columns):
- raise ValueError(f"DataFrame缺少必要的列。需要的列有: {required_columns}")
-
- # 确保'风速'列是数值类型
- dataFrameMerge[confData.field_wind_speed] = pd.to_numeric(dataFrameMerge[confData.field_wind_speed], errors='coerce')
-
- # 计算每个turbine_name的平均风速
- average_wind_speed = dataFrameMerge.groupby(Field_NameOfTurbine)[confData.field_wind_speed].mean().reset_index()
-
- # 使用plotly绘制柱状图
- fig = px.bar(average_wind_speed, x=Field_NameOfTurbine, y=confData.field_wind_speed, title='Turbine Average Wind Speed')
-
- # 更新x轴和y轴的标签
- fig.update_xaxes(title_text='Turbine Name', tickangle=-45)
- fig.update_yaxes(title_text='Average Wind Speed (m/s)')
- # 如果需要进一步调整标题样式或位置(尽管默认情况下标题是居中的)
- # 可以使用 update_layout 来设置标题的 x 坐标(xanchor)为 'center' 来确保居中
- fig.update_layout(title_x=0.5) # 设置标题的x位置为图的中心
-
- # 保存图像
- output_file = os.path.join(outputAnalysisDir, f"WindSpeedAvg_Turbines.png")
- fig.write_image(output_file)
|