Module bayesvalidrox.post_processing.adaptPlot

Created on Thu Aug 13 13:46:24 2020

@author: farid

Expand source code
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 13 13:46:24 2020

@author: farid
"""

import numpy as np
import os
from sklearn.metrics import mean_squared_error, r2_score
from itertools import cycle
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
plt.rcParams.update({'font.size': 24})
plt.rc('figure', figsize = (24, 16))
plt.rc('font', family='serif', serif='Arial')
plt.rc('axes', grid = True)
plt.rc('text', usetex=True)
plt.rc('xtick', labelsize=24)
plt.rc('ytick', labelsize=24)
plt.rc('axes', labelsize=24)
plt.rc('axes', linewidth=2)
plt.rc('axes', grid=True)
plt.rc('grid', linestyle="-")
plt.rc('savefig', dpi=1000)

def adaptPlot(PCEModel, Y_Val, Y_PC_Val, Y_PC_Val_std, x_values=[], plotED=False, SaveFig=True):
    
    NrofSamples = PCEModel.ExpDesign.n_new_samples
    initNSamples = PCEModel.ExpDesign.n_init_samples
    itrNr = 1 + (PCEModel.ExpDesign.X.shape[0] - initNSamples)//NrofSamples

    oldEDY =  PCEModel.ExpDesign.Y
    
    if SaveFig:
        newpath = (r'adaptivePlots')
        if not os.path.exists(newpath): os.makedirs(newpath)
        
        # create a PdfPages object
        pdf = PdfPages('./'+newpath+'/Model_vs_PCEModel'+'_itr_'+str(itrNr)+'.pdf')

    # List of markers and colors
    color = cycle((['b', 'g', 'r', 'y', 'k']))
    marker = cycle(('x', 'd', '+', 'o', '*')) 
    
    OutNames = list(Y_Val.keys())
    x_axis = 'Time [s]'
    if len(OutNames) == 1: OutNames.insert(0, x_axis)
    try:
        x_values =  Y_Val[OutNames[0]]
    except:
        x_values =  x_values
    
    fig = plt.figure(figsize=(24, 16))
    
    # Plot the model vs PCE model
    for keyIdx, key in enumerate(OutNames[1:]):

        Y_PC_Val_ = Y_PC_Val[key]
        Y_PC_Val_std_ = Y_PC_Val_std[key]
        Y_Val_ = Y_Val[key]
        old_EDY = oldEDY[key]
        
        for idx in range(NrofSamples):
            Color = next(color)
            Marker = next(marker)
            
            plt.plot(x_values, Y_Val_[idx,:], color=Color, marker=Marker, lw=2.0, label='$Y_{%s}^{M}$'%(idx+itrNr))
            
            plt.plot(x_values, Y_PC_Val_[idx,:], color=Color, marker=Marker, lw=2.0, linestyle='--', label='$Y_{%s}^{PCE}$'%(idx+itrNr))
            plt.fill_between(x_values, Y_PC_Val_[idx,:]-1.96*Y_PC_Val_std_[idx,:], 
                              Y_PC_Val_[idx,:]+1.96*Y_PC_Val_std_[idx,:], color=Color,alpha=0.15)
            
            if plotED:
                for output in old_EDY:
                    plt.plot(x_values, output, color='grey', alpha=0.1)
            
        # Calculate the RMSE
        RMSE = mean_squared_error(Y_PC_Val_, Y_Val_, squared=False)
        R2 = r2_score(Y_PC_Val_.reshape(-1,1), Y_Val_.reshape(-1,1))
        
        plt.ylabel(key)
        plt.xlabel(x_axis)
        plt.title(key)
        
        ax = fig.axes[0]
        ax.legend(loc='best', frameon=True)
        fig.canvas.draw()
        ax.text(0.65, 0.85, 'RMSE = '+ str(round(RMSE, 3)) + '\n' + r'$R^2$ = '+ str(round(R2, 3)),
                transform=ax.transAxes, color='black', bbox=dict(facecolor='none', edgecolor='black', 
                                         boxstyle='round,pad=1'))
        
        plt.grid()
        
        if SaveFig:
            # save the current figure
            pdf.savefig(fig, bbox_inches='tight')
            
            # Destroy the current plot
            plt.clf()
        
    pdf.close()

Functions

def adaptPlot(PCEModel, Y_Val, Y_PC_Val, Y_PC_Val_std, x_values=[], plotED=False, SaveFig=True)
Expand source code
def adaptPlot(PCEModel, Y_Val, Y_PC_Val, Y_PC_Val_std, x_values=[], plotED=False, SaveFig=True):
    
    NrofSamples = PCEModel.ExpDesign.n_new_samples
    initNSamples = PCEModel.ExpDesign.n_init_samples
    itrNr = 1 + (PCEModel.ExpDesign.X.shape[0] - initNSamples)//NrofSamples

    oldEDY =  PCEModel.ExpDesign.Y
    
    if SaveFig:
        newpath = (r'adaptivePlots')
        if not os.path.exists(newpath): os.makedirs(newpath)
        
        # create a PdfPages object
        pdf = PdfPages('./'+newpath+'/Model_vs_PCEModel'+'_itr_'+str(itrNr)+'.pdf')

    # List of markers and colors
    color = cycle((['b', 'g', 'r', 'y', 'k']))
    marker = cycle(('x', 'd', '+', 'o', '*')) 
    
    OutNames = list(Y_Val.keys())
    x_axis = 'Time [s]'
    if len(OutNames) == 1: OutNames.insert(0, x_axis)
    try:
        x_values =  Y_Val[OutNames[0]]
    except:
        x_values =  x_values
    
    fig = plt.figure(figsize=(24, 16))
    
    # Plot the model vs PCE model
    for keyIdx, key in enumerate(OutNames[1:]):

        Y_PC_Val_ = Y_PC_Val[key]
        Y_PC_Val_std_ = Y_PC_Val_std[key]
        Y_Val_ = Y_Val[key]
        old_EDY = oldEDY[key]
        
        for idx in range(NrofSamples):
            Color = next(color)
            Marker = next(marker)
            
            plt.plot(x_values, Y_Val_[idx,:], color=Color, marker=Marker, lw=2.0, label='$Y_{%s}^{M}$'%(idx+itrNr))
            
            plt.plot(x_values, Y_PC_Val_[idx,:], color=Color, marker=Marker, lw=2.0, linestyle='--', label='$Y_{%s}^{PCE}$'%(idx+itrNr))
            plt.fill_between(x_values, Y_PC_Val_[idx,:]-1.96*Y_PC_Val_std_[idx,:], 
                              Y_PC_Val_[idx,:]+1.96*Y_PC_Val_std_[idx,:], color=Color,alpha=0.15)
            
            if plotED:
                for output in old_EDY:
                    plt.plot(x_values, output, color='grey', alpha=0.1)
            
        # Calculate the RMSE
        RMSE = mean_squared_error(Y_PC_Val_, Y_Val_, squared=False)
        R2 = r2_score(Y_PC_Val_.reshape(-1,1), Y_Val_.reshape(-1,1))
        
        plt.ylabel(key)
        plt.xlabel(x_axis)
        plt.title(key)
        
        ax = fig.axes[0]
        ax.legend(loc='best', frameon=True)
        fig.canvas.draw()
        ax.text(0.65, 0.85, 'RMSE = '+ str(round(RMSE, 3)) + '\n' + r'$R^2$ = '+ str(round(R2, 3)),
                transform=ax.transAxes, color='black', bbox=dict(facecolor='none', edgecolor='black', 
                                         boxstyle='round,pad=1'))
        
        plt.grid()
        
        if SaveFig:
            # save the current figure
            pdf.savefig(fig, bbox_inches='tight')
            
            # Destroy the current plot
            plt.clf()
        
    pdf.close()