From a9a6f018db6d3020120857c0c8cbf9732ac31781 Mon Sep 17 00:00:00 2001 From: Luc Duron Date: Thu, 26 Oct 2017 23:17:22 +0200 Subject: [PATCH] [fix #2] Avoid crash while ploting a variable whose min and max are equal --- PyTelTools/workflow/util.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/PyTelTools/workflow/util.py b/PyTelTools/workflow/util.py index 741545d..c8485a9 100644 --- a/PyTelTools/workflow/util.py +++ b/PyTelTools/workflow/util.py @@ -23,6 +23,9 @@ from slf import Serafin +EPS_VALUE = 0.001 # value to add to or substrate from min or max values for color maps + + logger = logging.getLogger(__name__) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) @@ -1083,6 +1086,9 @@ def change_color_range(self): except ValueError: QMessageBox.critical(self, 'Error', 'Invalid input.', QMessageBox.Ok) return + if cmax <= cmin: + QMessageBox.critical(self, 'Error', 'Values are not increasing.', QMessageBox.Ok) + return self.color_limits = (cmin, cmax) self.replot(False) @@ -1129,7 +1135,11 @@ def replot(self, compute=True): self.canvas.axes.tricontourf(self.triang, self.values, cmap=self.current_style, levels=levels, extend='both', vmin=self.color_limits[0], vmax=self.color_limits[1]) else: - levels = np.linspace(np.nanmin(self.values), np.nanmax(self.values), NB_COLOR_LEVELS) + min_value, max_value = np.nanmin(self.values), np.nanmax(self.values) + if min_value == max_value: + min_value -= EPS_VALUE + max_value += EPS_VALUE + levels = np.linspace(min_value, max_value, NB_COLOR_LEVELS) self.canvas.axes.tricontourf(self.triang, self.values, cmap=self.current_style, levels=levels, extend='both') @@ -1280,6 +1290,9 @@ def change_color_range(self): except ValueError: QMessageBox.critical(self, 'Error', 'Invalid input.', QMessageBox.Ok) return + if cmax <= cmin: + QMessageBox.critical(self, 'Error', 'Values are not increasing.', QMessageBox.Ok) + return self.color_limits = (cmin, cmax) self.replot(False) @@ -1319,7 +1332,11 @@ def replot(self, compute=True): self.canvas.axes.tricontourf(triang, self.z, cmap=self.current_style, levels=levels, extend='both', vmin=self.color_limits[0], vmax=self.color_limits[1]) else: - levels = np.linspace(np.nanmin(self.z), np.nanmax(self.z), NB_COLOR_LEVELS) + min_value, max_value = np.nanmin(self.z), np.nanmax(self.z) + if min_value == max_value: + min_value -= EPS_VALUE + max_value += EPS_VALUE + levels = np.linspace(min_value, max_value, NB_COLOR_LEVELS) self.canvas.axes.tricontourf(triang, self.z, cmap=self.current_style, levels=levels, extend='both') divider = make_axes_locatable(self.canvas.axes) @@ -2202,7 +2219,11 @@ def replot(self, mesh, values, color_style, limits, variable_label): self.axes.tricontourf(triang, values, cmap=color_style, levels=levels, extend='both', vmin=limits[0], vmax=limits[1]) else: - levels = np.linspace(np.nanmin(values), np.nanmax(values), NB_COLOR_LEVELS) + min_value, max_value = np.nanmin(values), np.nanmax(values) + if min_value == max_value: + min_value -= EPS_VALUE + max_value += EPS_VALUE + levels = np.linspace(min_value, max_value, NB_COLOR_LEVELS) self.axes.tricontourf(triang, values, cmap=color_style, levels=levels, extend='both') # add colorbar @@ -2314,6 +2335,9 @@ def change_color_range(self): except ValueError: QMessageBox.critical(self, 'Error', 'Invalid input.', QMessageBox.Ok) return + if cmax <= cmin: + QMessageBox.critical(self, 'Error', 'Values are not increasing.', QMessageBox.Ok) + return self.color_limits = (cmin, cmax) self.replot(False)