Source code for foxes.output.state_turbine_map

import matplotlib.pyplot as plt
import numpy as np

import foxes.constants as FC
from .output import Output


[docs]class StateTurbineMap(Output): """ Creates heat maps with turbines on the one and states on the other axis. Attributes ---------- results: xarray.Dataset The farm results :group: output """
[docs] def __init__(self, farm_results): """ Constructor. Parameters ---------- farm_results: xarray.Dataset The farm results """ self.results = farm_results
[docs] def plot_map( self, variable, title=None, ax=None, figsize=None, **kwargs, ): """ Plot the heat map for the selected variable. Parameters ---------- variable: str The variable to plot title: str, optional The plot title ax: pyplot.Axis, optional The axis figsize: tuple The figsize argument for plt.subplots() in case ax is not provided kwargs: dict, optional Additional parameters for plt.pcolormesh() Returns ------- ax: pyplot.Axis The plot axis """ turbines = self.results[FC.TURBINE].to_numpy() states = self.results[FC.STATE].to_numpy() if ax is None: __, ax = plt.subplots(figsize=figsize) fig = ax.get_figure() ds = states[-1] - states[-2] states = np.append(states, states[-1] + ds) turbines = np.arange(len(turbines) + 1) y, x = np.meshgrid(states, turbines) z = self.results[variable].to_numpy() prgs = {"shading": "flat"} prgs.update(kwargs) c = ax.pcolormesh(x, y, z.T, **prgs) ax.set_xticks(turbines[:-1] + 0.5) ax.set_xticklabels(turbines[:-1]) yt = ax.get_yticks() ytl = ax.get_yticklabels() ax.set_yticks(yt[:-1] + 0.5 * (yt[-1] - yt[-2]), ytl[:-1]) if len(turbines) > 10: xt = ax.get_xticks() xtl = [None for t in xt] xtl[::5] = ax.get_xticklabels()[::5] ax.set_xticks(xt, xtl) fig.colorbar(c, ax=ax) t = title if title is not None else variable ax.set_title(t) ax.set_xlabel("Turbine index") ax.set_ylabel("State") return ax