Exemplo n.º 1
0
 def set_unselected_marker_style(self, color: str) -> dict:
     if not self.discrete_color:
         return {"opacity": 0.1}
     return {
         "color":
         rgb_to_str(
             scale_rgb_lightness(hex_to_rgb(self.colormap[color]), 250))
     }
    def add_statistics_traces(
        self,
        vectors_statistics_df: pd.DataFrame,
        ensemble: str,
        statistics_options: List[StatisticsOptions],
        line_width: Optional[int] = None,
        color_lightness_scale: Optional[float] = None,
    ) -> None:
        color = self._ensemble_colors.get(ensemble)
        if not color:
            raise ValueError(
                f'Ensemble "{ensemble}" is not present in colors dict!')

        if color_lightness_scale:
            # Range: 50% - 150% lightness
            scale = max(50.0, min(150.0, color_lightness_scale))
            color = rgb_to_str(scale_rgb_lightness(hex_to_rgb(color), scale))

        # Dictionary with vector name as key and list of ensemble traces as value
        vector_traces_set: Dict[str, List[dict]] = {}

        # Get vectors - order not important
        vectors: Set[str] = set(
            vectors_statistics_df.columns.get_level_values(0)) - set(["DATE"])
        self._validate_vectors_are_selected(vectors)

        for vector in vectors:
            # Retrieve DATE and statistics columns for specific vector
            vector_statistics_df = pd.DataFrame(
                vectors_statistics_df["DATE"]).join(
                    vectors_statistics_df[vector])
            line_shape = self._vector_line_shapes.get(
                vector, self._line_shape_fallback)
            vector_traces_set[vector] = create_vector_statistics_traces(
                vector_statistics_df=vector_statistics_df,
                color=color,
                legend_group=ensemble,
                line_shape=line_shape,
                line_width=line_width if line_width else 2,
                hovertemplate=render_hovertemplate(vector,
                                                   self._sampling_frequency),
                statistics_options=statistics_options,
            )

        # If vector data is added for ensemble
        if vector_traces_set:
            self._update_added_ensemble_traces_list(ensemble)

        # Add traces to figure
        self._add_vector_traces_set_to_figure(vector_traces_set)
    def add_realizations_traces(
        self,
        vectors_df: pd.DataFrame,
        ensemble: str,
        color_lightness_scale: Optional[float] = None,
    ) -> None:
        color = self._ensemble_colors.get(ensemble)
        if not color:
            raise ValueError(
                f'Ensemble "{ensemble}" is not present in colors dict!')

        if color_lightness_scale:
            # Range: 50% - 150% lightness
            scale = max(50.0, min(150.0, color_lightness_scale))
            color = rgb_to_str(scale_rgb_lightness(hex_to_rgb(color), scale))

        # Get vectors - order not important
        vectors: Set[str] = set(vectors_df.columns) - set(["DATE", "REAL"])
        self._validate_vectors_are_selected(vectors)

        # Dictionary with vector name as key and list of ensemble traces as value
        vector_traces_set: Dict[str, List[dict]] = {}

        for vector in vectors:
            line_shape = self._vector_line_shapes.get(
                vector, self._line_shape_fallback)
            vector_traces_set[vector] = create_vector_realization_traces(
                vector_df=vectors_df[["DATE", "REAL", vector]],
                ensemble=ensemble,
                legend_group=ensemble,
                color=color,
                line_shape=line_shape,
                hovertemplate=render_hovertemplate(vector,
                                                   self._sampling_frequency),
            )

        # If vector data is added for ensemble
        if vector_traces_set:
            self._update_added_ensemble_traces_list(ensemble)

        # Add traces to figure
        self._add_vector_traces_set_to_figure(vector_traces_set)
    def add_realizations_traces(
        self,
        vectors_df: pd.DataFrame,
        ensemble: str,
        color_lightness_scale: Optional[float] = None,
    ) -> None:
        # Dictionary with vector name as key and list of ensemble traces as value
        vector_traces_set: Dict[str, List[dict]] = {}

        # Get vectors - order not important
        vectors: Set[str] = set(vectors_df.columns) - set(["DATE", "REAL"])
        self._validate_vectors_are_selected(vectors)

        for vector in vectors:
            self._added_vector_traces.add(vector)

            vector_df = vectors_df[["DATE", "REAL", vector]]

            color = self._vector_colors.get(vector, "black")
            if color_lightness_scale:
                # Range: 50% - 150% lightness
                scale = max(50.0, min(150.0, color_lightness_scale))
                color = rgb_to_str(
                    scale_rgb_lightness(hex_to_rgb(color), scale))

            line_shape = self._vector_line_shapes.get(
                vector, self._line_shape_fallback)
            vector_traces_set[vector] = create_vector_realization_traces(
                vector_df=vector_df,
                ensemble=ensemble,
                legend_group=vector,
                color=color,
                line_shape=line_shape,
                hovertemplate=render_hovertemplate(vector,
                                                   self._sampling_frequency),
            )

        # Add traces to figure
        self._add_vector_traces_set_to_figure(vector_traces_set, ensemble)