summaryrefslogtreecommitdiff
path: root/silx/gui/plot/stats/stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/gui/plot/stats/stats.py')
-rw-r--r--silx/gui/plot/stats/stats.py52
1 files changed, 17 insertions, 35 deletions
diff --git a/silx/gui/plot/stats/stats.py b/silx/gui/plot/stats/stats.py
index 755b185..a81f7bb 100644
--- a/silx/gui/plot/stats/stats.py
+++ b/silx/gui/plot/stats/stats.py
@@ -1,7 +1,7 @@
# coding: utf-8
# /*##########################################################################
#
-# Copyright (c) 2017-2020 European Synchrotron Radiation Facility
+# Copyright (c) 2017-2021 European Synchrotron Radiation Facility
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -193,19 +193,6 @@ class _StatsContext(object):
self.clipData(item, plot, onlimits, roi=roi)
- def clipData(self, item, plot, onlimits, roi):
- """
- Clip the data to the current mask to have accurate statistics
-
- :param item: item for whiwh we want to clip data
- :param plot: plot containing the item
- :param onlimits: do we want to apply statistic only on
- visible data.
- :param roi: Region of interest for computing the statistics.
- :type roi: Union[None,:class:`_RegionOfInterestBase`]
- """
- raise NotImplementedError()
-
def clear_mask(self):
"""
Remove the mask to force recomputation of it on next iteration
@@ -232,7 +219,8 @@ class _StatsContext(object):
raise NotImplementedError("Base class")
def clipData(self, item, plot, onlimits, roi):
- """
+ """Clip the data to the current mask to have accurate statistics
+
Function called before computing each statistics associated to this
context. It will insure the context for the (item, plot, onlimits, roi)
is created.
@@ -340,9 +328,8 @@ class _CurveContext(_ScatterCurveHistoMixInContext):
mask = self.mask
else:
mask = (minX <= xData) & (xData <= maxX)
- yData = yData[mask]
- xData = xData[mask]
- mask = numpy.zeros_like(yData)
+ mask = mask == 0
+ self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX)
elif roi:
minX, maxX = roi.getFrom(), roi.getTo()
if self.is_mask_valid(onlimits=onlimits, from_=minX, to_=maxX):
@@ -350,10 +337,11 @@ class _CurveContext(_ScatterCurveHistoMixInContext):
else:
mask = (minX <= xData) & (xData <= maxX)
mask = mask == 0
- mask = mask.astype(numpy.int32)
+ self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX)
else:
mask = numpy.zeros_like(yData)
+ mask = mask.astype(numpy.uint32)
self.xData = xData
self.yData = yData
self.values = numpy.ma.array(yData, mask=mask)
@@ -363,7 +351,6 @@ class _CurveContext(_ScatterCurveHistoMixInContext):
else:
self.min, self.max = None, None
self.data = (xData, yData)
-
self.axes = (xData,)
def _checkContextInputs(self, item, plot, onlimits, roi):
@@ -399,38 +386,33 @@ class _HistogramContext(_ScatterCurveHistoMixInContext):
if onlimits:
minX, maxX = plot.getXAxis().getLimits()
- if self.is_mask_valid(onlimits, from_=minX, to_=maxX):
+ if self.is_mask_valid(onlimits=onlimits, from_=minX, to_=maxX):
mask = self.mask
else:
mask = (minX <= xData) & (xData <= maxX)
- self._set_mask_validity(onlimits=True, from_=minX, to_=maxX)
+ mask = mask == 0
+ self._set_mask_validity(onlimits=onlimits, from_=minX, to_=maxX)
elif roi:
- if self.is_mask_valid(onlimits, from_=roi._fromdata, to_=roi._todata):
+ if self.is_mask_valid(onlimits=onlimits, from_=roi._fromdata, to_=roi._todata):
mask = self.mask
else:
mask = (roi._fromdata <= xData) & (xData <= roi._todata)
mask = mask == 0
- self._set_mask_validity(onlimits=True, from_=roi._fromdata,
+ self._set_mask_validity(onlimits=onlimits, from_=roi._fromdata,
to_=roi._todata)
else:
- mask = numpy.zeros_like(self.data)
-
- if onlimits:
- yData = yData[mask]
- xData = xData[mask]
-
- self.data = (xData, yData)
- self.values = numpy.ma.array(yData, mask=mask)
- self.axes = (xData,)
-
+ mask = numpy.zeros_like(yData)
+ mask = mask.astype(numpy.uint32)
self.xData = xData
self.yData = yData
-
+ self.values = numpy.ma.array(yData, mask=(mask))
unmasked_data = self.values.compressed()
if len(unmasked_data) > 0:
self.min, self.max = min_max(unmasked_data)
else:
self.min, self.max = None, None
+ self.data = (self.xData, self.yData)
+ self.axes = (self.xData,)
def _checkContextInputs(self, item, plot, onlimits, roi):
_StatsContext._checkContextInputs(self, item=item, plot=plot,