Source code for cea.plots.sensitivity_demand_graphs

# -*- coding: utf-8 -*-
"""
Graphs for sensitivity_demand.py
"""
from __future__ import division

import pandas as pd

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import EllipseCollection
from matplotlib.backends.backend_pdf import PdfPages


__author__ = "Jimeno A. Fonseca"
__copyright__ = "Copyright 2016, Architecture and Building Systems - ETH Zurich"
__credits__ = ["Jimeno A. Fonseca"]
__license__ = "MIT"
__version__ = "0.1"
__maintainer__ = "Daren Thomas"
__email__ = "cea@arch.ethz.ch"
__status__ = "Production"


[docs]def graph(locator, parameters, method, samples): """ :param locator: locator class :param parameters: list of output parameters to analyse :param method: 'morris' or 'sobol' methods :param samples: number of samples to calculate :return: .pdf file per output_parameter stored in locator.get_sensitivity_plots_file() """ if method is 'sobol': result = ['ST', 'ST_conf', 'S1'] else: result = ['mu_star', 'sigma', 'mu_star_conf'] for parameter in parameters: pdf = PdfPages(locator.get_sensitivity_plots_file(parameter)) # read the mustar of morris analysis data_mu = pd.read_excel(locator.get_sensitivity_output(method, samples), (parameter + result[0])) data_sigma = pd.read_excel(locator.get_sensitivity_output(method, samples), (parameter + result[1])) var_names = data_mu.columns.values # normalize data to maximum value data_mu[var_names] = data_mu[var_names].div(data_mu[var_names].max(axis=1), axis=0) data_sigma[var_names] = data_sigma[var_names].div(data_sigma[var_names].max(axis=1), axis=0) # get x_names and y_names # columns x_names = data_mu.columns.tolist() # rows y_names = ['config '+str(i) for i in list(data_mu.index+1)] # get counter (integer to create the graph) x = range(len(x_names)) y = range(len (y_names)) X, Y = np.meshgrid(x,y) XY = np.hstack((X.ravel()[:, np.newaxis], Y.ravel()[:, np.newaxis])) ww = data_mu.values.tolist() hh = data_sigma.values.tolist() aa = X*0 fig, ax = plt.subplots(dpi=150, figsize=(len(x_names)+2, len(y_names)+2)) # ec = EllipseCollection(ww, hh, aa, units='x', offsets=XY, transOffset=ax.transData, cmap='Blues') ec.set_array(np.array(ww).ravel()) ec.set_alpha(0.8) ax.add_collection(ec) ax.autoscale_view() plt.xticks(np.arange(-1, max(x) + 1, 1.0)) plt.yticks(np.arange(-1, max(y) + 1, 1.0)) ax.set_xlabel('variables [-]') ax.set_ylabel('configurations [-]') ax.set_xticklabels([""]+x_names) ax.set_yticklabels([""]+y_names) cbar = plt.colorbar(ec) cbar.set_label(result[0]) plt.title('GRAPH OF '+parameter+' PARAMETER', fontsize=14, fontstyle='italic', fontweight='bold') pdf.savefig() plt.close() plt.clf() pdf.close()
[docs]def run_as_script(): import cea.globalvar as gv import cea.inputlocator as inputlocator gv = gv.GlobalVariables() scenario_path = gv.scenario_reference locator = inputlocator.InputLocator(scenario_path=scenario_path) output_parameters = ['QHf_MWhyr', 'QCf_MWhyr', 'Ef_MWhyr', 'QEf_MWhyr'] method = 'sobol' # method samples = 1000 graph(locator, output_parameters, method, samples)
if __name__ == '__main__': run_as_script()