Add analysis period filtering to utci_comfort_band_comparison plot

Abierto
#252 1 comentario 0 reacciones 1 asignado Ver en GitHub

@Tom-Kingstone ya está trabajando en esto.

Desde el 30/9/2024.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

type:feature

Add the ability to filter each HourlyContinuousCollection with an AnalysisPeriod to the utci_comfort_band_comparison plot.

Here is a rough version of something that works. It needs additional verification, e.g. to ensure that the length of the analysis_periods is the same as the length of the utci_collections, it is handled if this is not the case, and comments need updating. Add any additional necessary imports too. Further comments welcome.

def utci_comfort_band_comparison(
    utci_collections: tuple[HourlyContinuousCollection],
    ax: plt.Axes = None,
    identifiers: tuple[str] = None,
    utci_categories: CategoricalComfort = UTCI_DEFAULT_CATEGORIES,
    density: bool = True,
    analysis_periods = [],
    **kwargs,
) -> plt.Axes:
    """Create a proportional bar chart showing how different UTCI collections
    compare in terms of time within each comfort band.

    Args:
        utci_collections (list[HourlyContinuousCollection]):
            A list of UTCI collections.
        ax (plt.Axes, optional):
            The matplotlib Axes to plot on. Defaults to None which uses the current Axes.
        identifiers (list[str], optional):
            A list of names to give each collection. Defaults to None.
        utci_categories (Categories, optional):
            The UTCI categories to use. Defaults to UTCI_DEFAULT_CATEGORIES.
        density (bool, optional):
            If True, then show percentage, otherwise show count. Defaults to True.
        **kwargs:
            Additional keyword arguments to pass to the function.

    Returns:
        plt.Axes:
            A matplotlib Axes object.
    """

    for n, col in enumerate(utci_collections):
        if not isinstance(col.header.data_type, LB_UniversalThermalClimateIndex):
            raise ValueError(
                f"Collection {n} data type is not UTCI and cannot be used in this plot."
            )
    if any(len(i) != len(utci_collections[0]) for i in utci_collections):
        raise ValueError("All collections must be the same length.")

    if ax is None:
        ax = plt.gca()

    # set the title
    ax.set_title(kwargs.pop("title", None))

    if identifiers is None:
        identifiers = [f"{n}" for n in range(len(utci_collections))]
    if len(identifiers) != len(utci_collections):
        raise ValueError(
            "The number of identifiers given does not match the number of UTCI collections given!"
        )

    #new stuff starts here
    if len(analysis_periods) > 0 and len(analysis_periods) == len(utci_collections):
        series_zips = zip(utci_collections, analysis_periods)
        serieses = [collection_to_series(utci_collection.filter_by_analysis_period(analysis_period)) for utci_collection, analysis_period in series_zips]

    counts = pd.concat(
        [utci_categories.value_counts(i, density=density) for i in serieses],
        axis=1,
        keys=identifiers,
    )
    counts.T.plot(
        ax=ax,
        kind="bar",
        stacked=True,
        color=utci_categories.colors,
        width=0.8,
        legend=False,
    )

# rest of file.....
Lenguaje dominante
Python
Estrellas
3
Forks
2
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de BHoM/LadybugTools_Toolkit

Todos los issues de BHoM/LadybugTools_Toolkit

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.