def mdl(self, result_type: ResultTypes): """ Plot the results :param result_type: :return: """ index = self.branch_names if result_type == ResultTypes.BusVoltageModule: data = np.abs(self.voltage) y_label = '(p.u.)' title = 'Bus voltage ' labels = self.bus_names # index = self.branch_names elif result_type == ResultTypes.BusVoltageAngle: data = np.angle(self.voltage, deg=True) y_label = '(Deg)' title = 'Bus voltage ' labels = self.bus_names # index = self.branch_names elif result_type == ResultTypes.BusActivePower: data = self.S.real y_label = '(MW)' title = 'Bus active power ' labels = self.bus_names # index = self.branch_names elif result_type == ResultTypes.BranchActivePowerFrom: data = self.Sf.real y_label = 'MW' title = 'Branch active power ' labels = ['# ' + x for x in self.branch_names] # index = self.branch_names elif result_type == ResultTypes.BranchLoading: data = self.loading.real * 100 y_label = '(%)' title = 'Branch loading ' labels = ['# ' + x for x in self.branch_names] # index = self.branch_names elif result_type == ResultTypes.OTDF: data = self.otdf y_label = 'Per unit' labels = ['# ' + x for x in self.branch_names] title = 'OTDF' else: raise Exception('Result type not understood:' + str(result_type)) # assemble model mdl = ResultsModel(data=data, index=index, columns=labels, title=title, ylabel=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> "ResultsModel": """ Get ResultsModel instance :param result_type: :return: ResultsModel instance """ if result_type == ResultTypes.BusActivePower: labels = self.bus_names data = self.S y_label = '(MW)' title = 'Bus active power ' elif result_type == ResultTypes.BranchActivePowerFrom: labels = self.branch_names data = self.Sf.real y_label = '(MW)' title = 'Branch power ' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names data = self.loading * 100 y_label = '(%)' title = 'Branch loading ' elif result_type == ResultTypes.BranchLosses: labels = self.branch_names data = self.losses y_label = '(MVA)' title = 'Branch losses' elif result_type == ResultTypes.BusVoltageModule: labels = self.bus_names data = self.voltage y_label = '(p.u.)' title = 'Bus voltage' else: raise Exception('Result type not understood:' + str(result_type)) if self.time is not None: index = self.time else: index = list(range(data.shape[0])) # assemble model return ResultsModel(data=data, index=index, columns=labels, title=title, ylabel=y_label, units=y_label)
def mdl(self, result_type: ResultTypes): """ Plot the results :param result_type: :return: """ index = self.branch_names if result_type == ResultTypes.ContingencyFrequency: data = self.overload_count y_label = '(#)' title = 'Contingency count ' labels = ['#' + x for x in self.branch_names] elif result_type == ResultTypes.ContingencyRelativeFrequency: data = self.relative_frequency y_label = '(p.u.)' title = 'Contingency relative frequency ' labels = ['#' + x for x in self.branch_names] elif result_type == ResultTypes.MaxOverloads: data = self.max_overload y_label = '(#)' title = 'Contingency count ' labels = ['#' + x for x in self.branch_names] elif result_type == ResultTypes.WorstContingencyFlows: data = self.worst_flows y_label = '(MW)' title = 'Worst contingency flows ' labels = self.branch_names index = self.time_array elif result_type == ResultTypes.WorstContingencyLoading: data = self.worst_loading * 100.0 y_label = '(%)' title = 'Worst contingency loading ' labels = self.branch_names index = self.time_array else: raise Exception('Result type not understood:' + str(result_type)) # assemble model mdl = ResultsModel(data=data, index=index, columns=labels, title=title, ylabel=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> ResultsModel: """ Plot the results. Arguments: **result_type**: ResultTypes **indices**: Indices f the array to plot (indices of the elements) **names**: Names of the elements Returns: DataFrame """ if result_type == ResultTypes.PTDFBranchesSensitivity: labels = self.br_names y = self.flows_sensitivity_matrix y_label = '(p.u.)' title = 'Branches sensitivity' elif result_type == ResultTypes.PTDFBusVoltageSensitivity: labels = self.bus_names y = self.voltage_sensitivity_matrix y_label = '(p.u.)' title = 'Buses voltage sensitivity' else: labels = [] y = np.zeros(0) y_label = '' title = '' # assemble model mdl = ResultsModel(data=y, index=self.get_var_names(), columns=labels, title=title, ylabel=y_label, units=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> ResultsModel: """ Plot the results. Arguments: **result_type**: ResultTypes Returns: ResultsModel """ if result_type == ResultTypes.PTDFBranchesSensitivity: labels = self.bus_names y = self.PTDF y_label = '(p.u.)' title = 'Branches sensitivity' elif result_type == ResultTypes.OTDF: labels = self.br_names y = self.LODF y_label = '(p.u.)' title = 'Branch failure sensitivity' else: labels = [] y = np.zeros(0) y_label = '' title = '' # assemble model mdl = ResultsModel(data=y, index=self.br_names, columns=labels, title=title, ylabel=y_label, units=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> "ResultsModel": """ Plot the results :param result_type: :param ax: :param indices: :param names: :return: """ cdf_result_types = [ ResultTypes.BusVoltageCDF, ResultTypes.BusPowerCDF, ResultTypes.BranchPowerCDF, ResultTypes.BranchLoadingCDF, ResultTypes.BranchLossesCDF ] if result_type == ResultTypes.BusVoltageAverage: labels = self.bus_names y = self.v_avg_conv[1:-1, :] y_label = '(p.u.)' x_label = 'Sampling points' title = 'Bus voltage \naverage convergence' elif result_type == ResultTypes.BranchPowerAverage: labels = self.branch_names y = self.s_avg_conv[1:-1, :] y_label = '(MW)' x_label = 'Sampling points' title = 'Branch power \naverage convergence' elif result_type == ResultTypes.BranchLoadingAverage: labels = self.branch_names y = self.l_avg_conv[1:-1, :] y_label = '(%)' x_label = 'Sampling points' title = 'Branch loading \naverage convergence' elif result_type == ResultTypes.BranchLossesAverage: labels = self.branch_names y = self.loss_avg_conv[1:-1, :] y_label = '(MVA)' x_label = 'Sampling points' title = 'Branch losses \naverage convergence' elif result_type == ResultTypes.BusVoltageStd: labels = self.bus_names y = self.v_std_conv[1:-1, :] y_label = '(p.u.)' x_label = 'Sampling points' title = 'Bus voltage standard \ndeviation convergence' elif result_type == ResultTypes.BranchPowerStd: labels = self.branch_names y = self.s_std_conv[1:-1, :] y_label = '(MW)' x_label = 'Sampling points' title = 'Branch power standard \ndeviation convergence' elif result_type == ResultTypes.BranchLoadingStd: labels = self.branch_names y = self.l_std_conv[1:-1, :] y_label = '(%)' x_label = 'Sampling points' title = 'Branch loading standard \ndeviation convergence' elif result_type == ResultTypes.BranchLossesStd: labels = self.branch_names y = self.loss_std_conv[1:-1, :] y_label = '(MVA)' x_label = 'Sampling points' title = 'Branch losses standard \ndeviation convergence' elif result_type == ResultTypes.BusVoltageCDF: labels = self.bus_names cdf = CDF(np.abs(self.V_points)) y_label = '(p.u.)' x_label = 'Probability $P(X \leq x)$' title = result_type.value[0] elif result_type == ResultTypes.BranchLoadingCDF: labels = self.branch_names cdf = CDF(np.abs(self.loading_points.real)) y_label = '(p.u.)' x_label = 'Probability $P(X \leq x)$' title = result_type.value[0] elif result_type == ResultTypes.BranchLossesCDF: labels = self.branch_names cdf = CDF(np.abs(self.losses_points)) y_label = '(MVA)' x_label = 'Probability $P(X \leq x)$' title = result_type.value[0] elif result_type == ResultTypes.BranchPowerCDF: labels = self.branch_names cdf = CDF(self.Sbr_points.real) y_label = '(MW)' x_label = 'Probability $P(X \leq x)$' title = result_type.value[0] elif result_type == ResultTypes.BusPowerCDF: labels = self.bus_names cdf = CDF(self.S_points.real) y_label = '(p.u.)' x_label = 'Probability $P(X \leq x)$' title = result_type.value[0] else: x_label = '' y_label = '' title = '' if result_type not in cdf_result_types: # assemble model index = np.arange(0, y.shape[0], 1) mdl = ResultsModel(data=np.abs(y), index=index, columns=labels, title=title, ylabel=y_label, xlabel=x_label, units=y_label) else: mdl = ResultsModel(data=cdf.arr, index=cdf.prob, columns=labels, title=title, ylabel=y_label, xlabel=x_label, units=y_label) return mdl
def mdl(self, result_type) -> "ResultsModel": """ Plot the results :param result_type: type of results (string) :return: DataFrame of the results (or None if the result was not understood) """ if result_type == ResultTypes.BusVoltageModule: labels = self.bus_names y = np.abs(self.voltage) y_label = '(p.u.)' title = 'Bus voltage module' elif result_type == ResultTypes.BusVoltageAngle: labels = self.bus_names y = np.angle(self.voltage) y_label = '(Radians)' title = 'Bus voltage angle' elif result_type == ResultTypes.BranchPower: labels = self.branch_names y = self.Sf.real y_label = '(MW)' title = 'Branch power' elif result_type == ResultTypes.BusPower: labels = self.bus_names y = self.Sbus.real y_label = '(MW)' title = 'Bus power' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names y = np.abs(self.loading * 100.0) y_label = '(%)' title = 'Branch loading' elif result_type == ResultTypes.BranchOverloads: labels = self.branch_names y = np.abs(self.overloads) y_label = '(MW)' title = 'Branch overloads' elif result_type == ResultTypes.BranchLosses: labels = self.branch_names y = self.losses.real y_label = '(MW)' title = 'Branch losses' elif result_type == ResultTypes.LoadShedding: labels = self.load_names y = self.load_shedding y_label = '(MW)' title = 'Load shedding' elif result_type == ResultTypes.ControlledGeneratorShedding: labels = self.generator_names y = self.generation_shedding y_label = '(MW)' title = 'Controlled generator shedding' elif result_type == ResultTypes.ControlledGeneratorPower: labels = self.generator_names y = self.generators_power y_label = '(MW)' title = 'Controlled generators power' elif result_type == ResultTypes.BatteryPower: labels = self.battery_names y = self.battery_power y_label = '(MW)' title = 'Battery power' else: labels = [] y = np.zeros(0) y_label = '(MW)' title = 'Battery power' mdl = ResultsModel(data=y, index=labels, columns=[result_type.value[0]], title=title, ylabel=y_label, xlabel='', units=y_label) return mdl
def mdl(self, result_type: ResultTypes, indices=None, names=None) -> "ResultsModel": """ :param result_type: :param ax: :param indices: :param names: :return: """ if indices is None and names is not None: indices = np.array(range(len(names))) if len(indices) > 0: labels = names[indices] if result_type == ResultTypes.SigmaDistances: y = np.abs(self.distances[indices]) y_label = '(p.u.)' title = 'Sigma distances ' elif result_type == ResultTypes.SigmaReal: y = self.sigma_re[indices] y_label = '(deg)' title = 'Real sigma ' elif result_type == ResultTypes.SigmaImag: y = self.sigma_im[indices] y_label = '(p.u.)' title = 'Imaginary Sigma ' elif result_type == ResultTypes.SigmaPlusDistances: y = np.c_[self.sigma_re[indices], self.sigma_im[indices], self.distances[indices]] y_label = '(p.u.)' title = 'Sigma and distances' mdl = ResultsModel( data=y, index=labels, columns=['σ real', 'σ imaginary', 'Distances'], title=title, ylabel=y_label, units=y_label) return mdl else: n = len(labels) y = np.zeros(n) y_label = '' title = '' # assemble model mdl = ResultsModel(data=y, index=labels, columns=[result_type.value[0]], title=title, ylabel=y_label, units=y_label) return mdl else: return None
def mdl(self, result_type) -> "ResultsModel": """ Plot the results :param result_type: :return: """ if result_type == ResultTypes.BusVoltageModule: labels = self.bus_names y = np.abs(self.voltage) y_label = '(p.u.)' title = 'Bus voltage module' elif result_type == ResultTypes.BusVoltageAngle: labels = self.bus_names y = np.angle(self.voltage) y_label = '(Radians)' title = 'Bus voltage angle' elif result_type == ResultTypes.ShadowPrices: labels = self.bus_names y = self.shadow_prices y_label = '(currency)' title = 'Bus shadow prices' elif result_type == ResultTypes.BranchPower: labels = self.branch_names y = self.Sf.real y_label = '(MW)' title = 'Branch power ' elif result_type == ResultTypes.BusPower: labels = self.bus_names y = self.Sbus.real y_label = '(MW)' title = 'Bus power ' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names y = np.abs(self.loading * 100.0) y_label = '(%)' title = 'Branch loading ' elif result_type == ResultTypes.BranchOverloads: labels = self.branch_names y = np.abs(self.overloads) y_label = '(MW)' title = 'Branch overloads ' elif result_type == ResultTypes.BranchLosses: labels = self.branch_names y = self.losses.real y_label = '(MW)' title = 'Branch losses ' elif result_type == ResultTypes.LoadShedding: labels = self.load_names y = self.load_shedding y_label = '(MW)' title = 'Load shedding' elif result_type == ResultTypes.ControlledGeneratorPower: labels = self.generator_names y = self.generator_power y_label = '(MW)' title = 'Controlled generator power' elif result_type == ResultTypes.ControlledGeneratorShedding: labels = self.generator_names y = self.generator_shedding y_label = '(MW)' title = 'Controlled generator power' elif result_type == ResultTypes.BatteryPower: labels = self.battery_names y = self.battery_power y_label = '(MW)' title = 'Battery power' elif result_type == ResultTypes.BatteryEnergy: labels = self.battery_names y = self.battery_energy y_label = '(MWh)' title = 'Battery energy' else: labels = '' y_label = '' title = '' y = np.zeros(0) if self.time is not None: index = self.time else: index = np.arange(0, y.shape[0], 1) mdl = ResultsModel(data=y, index=index, columns=labels, title=title, ylabel=y_label, xlabel='', units=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> "ResultsModel": """ :param result_type: :return: """ if result_type == ResultTypes.BusVoltageModule: labels = self.bus_names y = np.abs(self.voltage) y_label = '(p.u.)' title = 'Bus voltage ' elif result_type == ResultTypes.BusVoltageAngle: labels = self.bus_names y = np.angle(self.voltage, deg=True) y_label = '(deg)' title = 'Bus voltage ' elif result_type == ResultTypes.BusActivePower: labels = self.bus_names y = self.Sbus.real y_label = '(MW)' title = 'Bus Active power ' elif result_type == ResultTypes.BusReactivePower: labels = self.bus_names y = self.Sbus.imag y_label = '(MVAr)' title = 'Bus Reactive power ' elif result_type == ResultTypes.BusVoltagePolar: labels = self.bus_names y = self.voltage y_label = '(p.u.)' title = 'Bus voltage ' elif result_type == ResultTypes.BranchPower: labels = self.branch_names y = self.Sf y_label = '(MVA)' title = 'Branch power ' elif result_type == ResultTypes.BranchActivePowerFrom: labels = self.branch_names y = self.Sf.real y_label = '(MW)' title = 'Branch active power ' elif result_type == ResultTypes.BranchReactivePowerFrom: labels = self.branch_names y = self.Sf.imag y_label = '(MVAr)' title = 'Branch reactive power ' elif result_type == ResultTypes.BranchActivePowerTo: labels = self.branch_names y = self.St.real y_label = '(MW)' title = 'Branch active power ' elif result_type == ResultTypes.BranchReactivePowerTo: labels = self.branch_names y = self.St.imag y_label = '(MVAr)' title = 'Branch reactive power ' elif result_type == ResultTypes.Transformer2WTapModule: labels = self.transformer_names y = self.transformer_tap_module y_label = '(p.u.)' title = 'Transformer tap module ' elif result_type == ResultTypes.BranchCurrent: labels = self.branch_names y = self.If y_label = '(p.u.)' title = 'Branch current ' elif result_type == ResultTypes.BranchActiveCurrentFrom: labels = self.branch_names y = self.If.real y_label = '(p.u.)' title = 'Branch active current ' elif result_type == ResultTypes.BranchReactiveCurrentFrom: labels = self.branch_names y = self.If.imag y_label = '(p.u.)' title = 'Branch reactive current ' elif result_type == ResultTypes.BranchActiveCurrentTo: labels = self.branch_names y = self.It.real y_label = '(p.u.)' title = 'Branch active current ' elif result_type == ResultTypes.BranchReactiveCurrentTo: labels = self.branch_names y = self.It.imag y_label = '(p.u.)' title = 'Branch reactive current ' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names y = np.abs(self.loading) * 100 y_label = '(%)' title = 'Branch loading ' elif result_type == ResultTypes.BranchLosses: labels = self.branch_names y = self.losses y_label = '(MVA)' title = 'Branch losses ' elif result_type == ResultTypes.BranchActiveLosses: labels = self.branch_names y = self.losses.real y_label = '(MW)' title = 'Branch active losses ' elif result_type == ResultTypes.BranchReactiveLosses: labels = self.branch_names y = self.losses.imag y_label = '(MVAr)' title = 'Branch reactive losses ' elif result_type == ResultTypes.BranchVoltage: labels = self.branch_names y = np.abs(self.Vbranch) y_label = '(p.u.)' title = 'Branch voltage drop ' elif result_type == ResultTypes.BranchAngles: labels = self.branch_names y = np.angle(self.Vbranch, deg=True) y_label = '(deg)' title = 'Branch voltage angle ' elif result_type == ResultTypes.BranchTapModule: labels = self.branch_names y = self.ma y_label = '(p.u.)' title = 'Branch tap module ' elif result_type == ResultTypes.BranchTapAngle: labels = self.branch_names y = self.theta y_label = '(rad)' title = 'Branch tap angle ' elif result_type == ResultTypes.BranchBeq: labels = self.branch_names y = self.Beq y_label = '(p.u.)' title = 'Branch Beq ' elif result_type == ResultTypes.HvdcLosses: labels = self.hvdc_names y = self.hvdc_losses y_label = '(MW)' title = result_type.value elif result_type == ResultTypes.HvdcPowerFrom: labels = self.hvdc_names y = self.hvdc_Pf y_label = '(MW)' title = result_type.value elif result_type == ResultTypes.HvdcPowerTo: labels = self.hvdc_names y = self.hvdc_Pt y_label = '(MW)' title = result_type.value else: raise Exception('Unsupported result type: ' + str(result_type)) # assemble model mdl = ResultsModel(data=y, index=labels, columns=[result_type.value[0]], title=title, ylabel=y_label, units=y_label) return mdl
def mdl(self, result_type: ResultTypes) -> "ResultsModel": """ :param result_type: :return: """ if result_type == ResultTypes.BusVoltageModule: labels = self.bus_names data = np.abs(self.voltage) y_label = '(p.u.)' title = 'Bus voltage ' elif result_type == ResultTypes.BusVoltageAngle: labels = self.bus_names data = np.angle(self.voltage, deg=True) y_label = '(Deg)' title = 'Bus voltage ' elif result_type == ResultTypes.BusActivePower: labels = self.bus_names data = self.S.real y_label = '(MW)' title = 'Bus active power ' elif result_type == ResultTypes.BusReactivePower: labels = self.bus_names data = self.S.imag y_label = '(MVAr)' title = 'Bus reactive power ' elif result_type == ResultTypes.BranchPower: labels = self.branch_names data = self.Sf y_label = '(MVA)' title = 'Branch power ' elif result_type == ResultTypes.BranchActivePowerFrom: labels = self.branch_names data = self.Sf.real y_label = '(MW)' title = 'Branch power ' elif result_type == ResultTypes.BranchReactivePowerFrom: labels = self.branch_names data = self.Sf.imag y_label = '(MVAr)' title = 'Branch power ' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names data = np.abs(self.loading) * 100 y_label = '(%)' title = 'Branch loading ' elif result_type == ResultTypes.BranchLosses: labels = self.branch_names data = self.losses y_label = '(MVA)' title = 'Branch losses' elif result_type == ResultTypes.BranchActiveLosses: labels = self.branch_names data = self.losses.real y_label = '(MW)' title = 'Branch losses' elif result_type == ResultTypes.BranchReactiveLosses: labels = self.branch_names data = self.losses.imag y_label = '(MVAr)' title = 'Branch losses' elif result_type == ResultTypes.BranchVoltage: labels = self.branch_names data = np.abs(self.Vbranch) y_label = '(p.u.)' title = result_type.value[0] elif result_type == ResultTypes.BranchAngles: labels = self.branch_names data = np.angle(self.Vbranch, deg=True) y_label = '(deg)' title = result_type.value[0] elif result_type == ResultTypes.BatteryPower: labels = self.branch_names data = np.zeros_like(self.losses) y_label = '$\Delta$ (MVA)' title = 'Battery power' elif result_type == ResultTypes.SimulationError: data = self.error_values.reshape(-1, 1) y_label = 'p.u.' labels = ['Error'] title = 'Error' elif result_type == ResultTypes.HvdcLosses: labels = self.hvdc_names data = self.hvdc_losses y_label = '(MW)' title = result_type.value elif result_type == ResultTypes.HvdcPowerFrom: labels = self.hvdc_names data = self.hvdc_Pf y_label = '(MW)' title = result_type.value elif result_type == ResultTypes.HvdcPowerTo: labels = self.hvdc_names data = self.hvdc_Pt y_label = '(MW)' title = result_type.value else: raise Exception('Result type not understood:' + str(result_type)) if self.time is not None: index = self.time else: index = list(range(data.shape[0])) # assemble model mdl = ResultsModel(data=data, index=index, columns=labels, title=title, ylabel=y_label, units=y_label) return mdl
def mdl(self, result_type: ResultTypes = ResultTypes.BusVoltage) -> ResultsModel: """ Plot the results :param result_type: :return: """ y_label = '' x_label = '' title = '' if result_type == ResultTypes.BusVoltage: labels = self.bus_names y = abs(np.array(self.voltages)) x = self.lambdas title = 'Bus voltage' y_label = '(p.u.)' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BusActivePower: labels = self.bus_names y = self.Sbus.real x = self.lambdas title = 'Bus active power' y_label = '(p.u.)' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BusReactivePower: labels = self.bus_names y = self.Sbus.imag x = self.lambdas title = 'Bus reactive power' y_label = '(p.u.)' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchActivePowerFrom: labels = self.branch_names y = self.Sf.real x = self.lambdas title = 'Branch active power (from)' y_label = 'MW' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchReactivePowerFrom: labels = self.branch_names y = self.Sf.imag x = self.lambdas title = 'Branch reactive power (from)' y_label = 'MVAr' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchActivePowerTo: labels = self.branch_names y = self.St.real x = self.lambdas title = 'Branch active power (to)' y_label = 'MW' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchReactivePowerTo: labels = self.branch_names y = self.St.imag x = self.lambdas title = 'Branch reactive power (to)' y_label = 'MVAr' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchActiveLosses: labels = self.branch_names y = self.losses.real x = self.lambdas title = 'Branch active power losses' y_label = 'MW' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchReactiveLosses: labels = self.branch_names y = self.losses.imag x = self.lambdas title = 'Branch reactive power losses' y_label = 'MVAr' x_label = 'Loading from the base situation ($\lambda$)' elif result_type == ResultTypes.BranchLoading: labels = self.branch_names y = np.abs(self.loading) * 100.0 x = self.lambdas title = 'Branch loading' y_label = '%' x_label = 'Loading from the base situation ($\lambda$)' else: labels = self.bus_names x = self.lambdas y = self.voltages # assemble model mdl = ResultsModel(data=y, index=x, columns=labels, title=title, ylabel=y_label, xlabel=x_label, units=y_label) return mdl