Skip to content
3 changes: 2 additions & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
2.23.3
2.23.0
- feat: add zoom-in functionality for contour plots (#211)
- fix: cache selected event per dataset in QuickView (#196)
- enh: add new logo (scope view and block matrix)
2.22.2
Expand Down
1 change: 1 addition & 0 deletions dcscope/gui/analysis/ana_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ def read_pipeline_state(self):
"contour": {
"enabled": self.groupBox_contour.isChecked(),
"legend": self.checkBox_legend.isChecked(),
"zoomin": self.checkBox_zoomin.isChecked(),
"line widths": [self.doubleSpinBox_lw_1.value(),
self.doubleSpinBox_lw_2.value(),
],
Expand Down
59 changes: 32 additions & 27 deletions dcscope/gui/analysis/ana_plot.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>627</width>
<height>934</height>
<height>936</height>
</rect>
</property>
<property name="windowTitle">
Expand All @@ -26,14 +26,14 @@
<item>
<widget class="QComboBox" name="comboBox_plots">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
<enum>QComboBox::SizeAdjustPolicy::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -52,8 +52,7 @@
<string>Duplicate</string>
</property>
<property name="icon">
<iconset theme="edit-paste">
<normaloff>.</normaloff>.</iconset>
<iconset theme="edit-paste"/>
</property>
</widget>
</item>
Expand All @@ -66,8 +65,7 @@
<string>Remove</string>
</property>
<property name="icon">
<iconset theme="remove">
<normaloff>.</normaloff>.</iconset>
<iconset theme="remove"/>
</property>
</widget>
</item>
Expand All @@ -76,7 +74,7 @@
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
Expand Down Expand Up @@ -152,7 +150,7 @@
<item>
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -228,7 +226,7 @@
<item>
<spacer name="horizontalSpacer_14">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -277,7 +275,7 @@
<item>
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -311,7 +309,7 @@
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -365,7 +363,7 @@
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -431,7 +429,7 @@
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -458,7 +456,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -483,7 +481,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_3" stretch="0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
Expand Down Expand Up @@ -519,7 +517,7 @@
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -534,7 +532,7 @@
<item>
<layout class="QGridLayout" name="gridLayout_scat">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
Expand Down Expand Up @@ -598,7 +596,7 @@
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -692,7 +690,7 @@
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -712,7 +710,7 @@
<item>
<spacer name="horizontalSpacer_16">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down Expand Up @@ -914,7 +912,7 @@
<item>
<spacer name="horizontalSpacer_15">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -936,7 +934,7 @@
<item row="1" column="5">
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -958,13 +956,20 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_zoomin">
<property name="text">
<string>Zoom-in</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -979,7 +984,7 @@
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand All @@ -999,10 +1004,10 @@
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
Expand Down
32 changes: 32 additions & 0 deletions dcscope/gui/pipeline_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,11 @@ def redraw(self, dslist, slot_states, plot_state, hash_flag=None):
else:
legend = None
for rtdc_ds, ss in zip(dslist, slot_states):
if plot_state["contour"].get("zoomin", False):
zoomin_contours(dslist=dslist,
plot_item=self,
plot_state=plot_state
)
con = add_contour(plot_item=self,
rtdc_ds=rtdc_ds,
plot_state=plot_state,
Expand Down Expand Up @@ -471,6 +476,33 @@ def add_label(text, anchor_parent, text_halign="center", text_valign="center",
label.setPos(x + dx, y + dy)


def zoomin_contours(dslist, plot_item, plot_state, margin_per=5):
"""Zoom-in contour data if enabled"""
x_min, x_max, y_min, y_max = 0, 0, 0, 0
# compute all contours
contours_list = [compute_contours(plot_state, ds) for ds in dslist]
# flatten list of contours
all_points = np.vstack([np.vstack(c) for conts in contours_list
for c in conts])

if all_points.size > 0:
x_min = np.min(all_points[:, 0])
x_max = np.max(all_points[:, 0])
y_min = np.min(all_points[:, 1])
y_max = np.max(all_points[:, 1])

# Add margin
x_margin = (x_max - x_min) * margin_per*0.01
y_margin = (y_max - y_min) * margin_per*0.01

# Set view range with margins
plot_item.setRange(
xRange=(x_min - x_margin, x_max + x_margin),
yRange=(y_min - y_margin, y_max + y_margin),
padding=0
)


def add_contour(plot_item, plot_state, rtdc_ds, slot_state, legend=None):
contours = compute_contours(plot_state=plot_state, rtdc_ds=rtdc_ds)
con = plot_state["contour"]
Expand Down
2 changes: 2 additions & 0 deletions dcscope/pipeline/plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"contour": {
"enabled": True,
"legend": False, # display plot legend
"zoomin": False, # enable zoom-in functionality
"line widths": [3.0, 1.5], # contour line widths [pt]
"line styles": ["solid", "dashed"],
"percentiles": [95.0, 50.0],
Expand Down Expand Up @@ -97,6 +98,7 @@
"contour": {
"enabled": bool,
"legend": bool,
"zoomin": bool,
"line widths": (float,),
"line styles": (["solid", "dashed", "dotted"],),
"percentiles": (float,),
Expand Down
Loading