Skip to content

Commit 1db38ea

Browse files
committed
Use indexer to reliably plot solutions with and wihtout scenarios/years
1 parent 05f0e5e commit 1db38ea

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

flixopt/results.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -652,22 +652,17 @@ def plot_heatmap(
652652
"""
653653
dataarray = self.solution[variable_name]
654654

655-
dataarray, suffix_parts = _apply_indexer_to_data(dataarray, indexer)
656-
657-
# Create name
658-
suffix = '--' + '-'.join(suffix_parts) if suffix_parts else ''
659-
name = variable_name if not suffix_parts else f'{variable_name}--{'-'.join(suffix_parts)}' if suffix else variable_name
660-
661655
return plot_heatmap(
662656
dataarray=dataarray,
663-
name=name,
657+
name=variable_name,
664658
folder=self.folder,
665659
heatmap_timeframes=heatmap_timeframes,
666660
heatmap_timesteps_per_frame=heatmap_timesteps_per_frame,
667661
color_map=color_map,
668662
save=save,
669663
show=show,
670664
engine=engine,
665+
indexer=indexer,
671666
)
672667

673668
def plot_network(
@@ -1330,6 +1325,7 @@ def plot_heatmap(
13301325
save: Union[bool, pathlib.Path] = False,
13311326
show: bool = True,
13321327
engine: plotting.PlottingEngine = 'plotly',
1328+
indexer: Optional[Dict[str, Any]] = None,
13331329
):
13341330
"""
13351331
Plots a heatmap of the solution of a variable.
@@ -1345,6 +1341,10 @@ def plot_heatmap(
13451341
show: Whether to show the plot or not.
13461342
engine: The engine to use for plotting. Can be either 'plotly' or 'matplotlib'.
13471343
"""
1344+
dataarray, suffix_parts = _apply_indexer_to_data(dataarray, indexer, drop=True)
1345+
suffix = '--' + '-'.join(suffix_parts) if suffix_parts else ''
1346+
name = name if not suffix_parts else name + suffix
1347+
13481348
heatmap_data = plotting.heat_map_data_from_df(
13491349
dataarray.to_dataframe(name), heatmap_timeframes, heatmap_timesteps_per_frame, 'ffill'
13501350
)
@@ -1608,7 +1608,7 @@ def apply_filter(array, coord_name: str, coord_values: Union[Any, List[Any]]):
16081608
return da
16091609

16101610

1611-
def _apply_indexer_to_data(data: Union[xr.DataArray, xr.Dataset], indexer: Optional[Dict[str, Any]] = None):
1611+
def _apply_indexer_to_data(data: Union[xr.DataArray, xr.Dataset], indexer: Optional[Dict[str, Any]] = None, drop=False):
16121612
"""
16131613
Apply indexer selection or auto-select first values for non-time dimensions.
16141614
@@ -1623,7 +1623,7 @@ def _apply_indexer_to_data(data: Union[xr.DataArray, xr.Dataset], indexer: Optio
16231623

16241624
if indexer is not None:
16251625
# User provided indexer
1626-
data = data.sel(indexer)
1626+
data = data.sel(indexer, drop=drop)
16271627
selection_string.extend(f"{v}[{k}]" for k, v in indexer.items())
16281628
else:
16291629
# Auto-select first value for each dimension except 'time'
@@ -1634,6 +1634,6 @@ def _apply_indexer_to_data(data: Union[xr.DataArray, xr.Dataset], indexer: Optio
16341634
selection[dim] = first_value
16351635
selection_string.append(f"{first_value}[{dim}]")
16361636
if selection:
1637-
data = data.sel(selection)
1637+
data = data.sel(selection, drop=drop)
16381638

16391639
return data, selection_string

0 commit comments

Comments
 (0)