Forecast / Support_module_dir /support_function_plot.py
msn-enginenova21's picture
Update Support_module_dir/support_function_plot.py
8735b50
from datetime import datetime
import matplotlib.pyplot as plt
# function for plot prediction and rolling window(previous price)
def combine_plot_function(dataframe_instance, predictions_instance, buffer):
try:
plt.figure(figsize=(13, 4))
# Scatter plot for the existing DataFrame
plt.plot(dataframe_instance['Date'],
dataframe_instance['Price'],
marker='o',
label='Previous Rolling Window Prices')
# Adding a vertical dashed line at the end of the existing DataFrame
plt.axvline(x=dataframe_instance['Date'].max(),
color='black',
linestyle='--',
label=None)
# Scatter plots for the prediction DataFrame after the dashed line
plt.plot(predictions_instance['Date'],
predictions_instance['Lower_Bound'],
marker='o',
label='Predicted Lower Bound',
color='red')
plt.plot(predictions_instance['Date'],
predictions_instance['Upper_Bound'],
marker='o',
label='Predicted Upper Bound',
color='green')
plt.plot(predictions_instance['Date'],
predictions_instance['Mean_Price'],
marker='o',
label='Mean Price',
color='blue')
# Shading the region between Lower Bound and Mean Price in red
plt.fill_between(predictions_instance['Date'],
predictions_instance['Lower_Bound'],
predictions_instance['Mean_Price'],
color='red', alpha=0.3)
# Shading the region between Mean Price and Upper Bound in green
plt.fill_between(predictions_instance['Date'],
predictions_instance['Mean_Price'],
predictions_instance['Upper_Bound'],
color='green', alpha=0.3)
# Connecting the last point of df_existing to the first point of df_new
plt.plot([dataframe_instance['Date'].max(), predictions_instance['Date'].min()],
[dataframe_instance['Price'].iloc[-1], predictions_instance['Lower_Bound'].iloc[0]],
linestyle='--', color='red')
plt.plot([dataframe_instance['Date'].max(), predictions_instance['Date'].min()],
[dataframe_instance['Price'].iloc[-1], predictions_instance['Upper_Bound'].iloc[0]],
linestyle='--', color='green') # Separate line for Upper Bound
plt.plot([dataframe_instance['Date'].max(), predictions_instance['Date'].min()],
[dataframe_instance['Price'].iloc[-1], predictions_instance['Mean_Price'].iloc[0]],
linestyle='--', color='blue') # Separate line for Mean Price
# Setting grid
plt.grid(True)
plt.legend()
plt.xticks(rotation=45)
# storing in buffer rather saving it
plt.savefig(buffer, format='png', bbox_inches='tight')
plt.close()
except Exception as e:
raise(f"Error in combine_plot_function: {e}")
# class function 3: For date and time
class DateTimeFunctionClass:
def __init__(self):
self.curr_date_time = datetime.now()
self.curr_date = self.curr_date_time.date()
self.curr_time = self.curr_date_time.strftime("%H_%M_%S")
def current_date(self):
return self.curr_date
def current_time(self):
return self.curr_time