Skip to content

Commit 7e8f36f

Browse files
committed
Add distribution connection line control
The connection line toggle disappeared with the plot customization dialog. Reintroduce it in the plot sidebar alongside the statistics controls.
1 parent 93eaabf commit 7e8f36f

4 files changed

Lines changed: 84 additions & 0 deletions

File tree

src/ert/gui/plotting/plot_window.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
from .widgets.everest_control_selection_widget import EverestControlSelectionWidget
6363
from .widgets.plot_controls import (
6464
BoxplotOptions,
65+
DistributionOptions,
6566
EverestControlsPlotOptions,
6667
GeneralPlotOptions,
6768
StatisticsOptions,
@@ -302,6 +303,7 @@ def __init__(
302303
self._general_options.titleEditRequested.connect(self._edit_title)
303304
self._boxplot_options = BoxplotOptions(self.update_plot)
304305
self._statistics_options = StatisticsOptions(self.update_plot)
306+
self._distribution_options = DistributionOptions(self.update_plot)
305307

306308
right_container = QWidget()
307309
right_layout = create_group_layout(
@@ -312,6 +314,7 @@ def __init__(
312314
self._everest_controls_group,
313315
self._boxplot_options.get_widget(),
314316
self._statistics_options.get_widget(),
317+
self._distribution_options.get_widget(),
315318
]
316319
)
317320
right_container.setLayout(right_layout)
@@ -320,6 +323,7 @@ def __init__(
320323
self._everest_controls_plot_options.get_widget().setVisible(False)
321324
self._boxplot_options.get_widget().setVisible(False)
322325
self._statistics_options.get_widget().setVisible(False)
326+
self._distribution_options.get_widget().setVisible(False)
323327
self._data_type_keys_widget.selectDefault()
324328

325329
splitter = QSplitter(Qt.Orientation.Horizontal)
@@ -388,6 +392,9 @@ def update_plot(self, layer: int | None = None) -> None:
388392
plot_widget.name in {MISFITS, CROSS_ENSEMBLE_STATISTICS}
389393
)
390394
self._statistics_options.get_widget().setVisible(plot_widget.name == STATISTICS)
395+
self._distribution_options.get_widget().setVisible(
396+
plot_widget.name == DISTRIBUTION
397+
)
391398
self._general_options.get_widget().setVisible(plot_widget.name != STD_DEV)
392399

393400
is_gradient_plot = plot_widget.name == EVEREST_GRADIENTS_PLOT
@@ -548,6 +555,8 @@ def fetch_data(
548555
plot_config.set_y_label(self._y_labels.get(key_def.key))
549556
if selected_tab == STATISTICS:
550557
self._statistics_options.apply_to(plot_config)
558+
elif selected_tab == DISTRIBUTION:
559+
self._distribution_options.apply_to(plot_config)
551560
plot_config.set_legend_enabled(self._general_options.legend_checkbox_state)
552561
plot_config.set_grid_enabled(self._general_options.grid_checkbox_state)
553562
plot_config.set_line_color_cycle(self._general_options.get_color_cycle())

src/ert/gui/plotting/widgets/plot_controls/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .boxplot_options import BoxplotOptions
22
from .custom_palette_dialog import CustomPaletteDialog
3+
from .distribution_options import DistributionOptions
34
from .everest_controls_plot_options import EverestControlsPlotOptions
45
from .general_options import GeneralPlotOptions
56
from .plot_color_palette_selector import PlotColorPaletteSelector
@@ -8,6 +9,7 @@
89
__all__ = [
910
"BoxplotOptions",
1011
"CustomPaletteDialog",
12+
"DistributionOptions",
1113
"EverestControlsPlotOptions",
1214
"GeneralPlotOptions",
1315
"PlotColorPaletteSelector",
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
from collections.abc import Callable
5+
from typing import TYPE_CHECKING
6+
7+
from PyQt6.QtWidgets import QGroupBox
8+
9+
from ert.gui.plotting.utils.qt_creator import (
10+
create_checkbox_with_tooltip,
11+
create_group_box,
12+
create_group_layout,
13+
)
14+
15+
if TYPE_CHECKING:
16+
from ert.gui.plotting.utils import PlotConfig
17+
18+
logger = logging.getLogger(__name__)
19+
20+
21+
class DistributionOptions:
22+
def __init__(self, connection_point: Callable[..., object]) -> None:
23+
self._connection_lines_toggle = create_checkbox_with_tooltip(
24+
"Connection lines",
25+
"Draw lines between the realizations of neighbouring ensembles",
26+
connection_point,
27+
initial_checked=False,
28+
logger=logger,
29+
)
30+
31+
self._distribution_options = create_group_box(
32+
"Distribution options",
33+
create_group_layout([self._connection_lines_toggle]),
34+
)
35+
36+
def apply_to(self, plot_config: PlotConfig) -> None:
37+
plot_config.set_distribution_line_enabled(
38+
self._connection_lines_toggle.isChecked()
39+
)
40+
41+
def get_widget(self) -> QGroupBox:
42+
return self._distribution_options
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from unittest.mock import Mock
2+
3+
from ert.gui.plotting.utils import PlotConfig
4+
from ert.gui.plotting.widgets.plot_controls.distribution_options import (
5+
DistributionOptions,
6+
)
7+
8+
9+
def test_that_connection_lines_toggle_controls_distribution_lines_in_plot_config(qtbot):
10+
options = DistributionOptions(Mock())
11+
qtbot.addWidget(options.get_widget())
12+
13+
assert not options._connection_lines_toggle.isChecked()
14+
disabled_config = PlotConfig()
15+
options.apply_to(disabled_config)
16+
assert not disabled_config.is_distribution_line_enabled()
17+
18+
options._connection_lines_toggle.setChecked(True)
19+
enabled_config = PlotConfig()
20+
options.apply_to(enabled_config)
21+
assert enabled_config.is_distribution_line_enabled()
22+
23+
24+
def test_that_toggling_connection_lines_invokes_the_connection_point(qtbot):
25+
connection_point = Mock()
26+
options = DistributionOptions(connection_point)
27+
qtbot.addWidget(options.get_widget())
28+
29+
options._connection_lines_toggle.setChecked(True)
30+
31+
connection_point.assert_called()

0 commit comments

Comments
 (0)