summaryrefslogtreecommitdiff
path: root/examples/exampleBaseline.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/exampleBaseline.py')
-rw-r--r--examples/exampleBaseline.py175
1 files changed, 175 insertions, 0 deletions
diff --git a/examples/exampleBaseline.py b/examples/exampleBaseline.py
new file mode 100644
index 0000000..838c1f7
--- /dev/null
+++ b/examples/exampleBaseline.py
@@ -0,0 +1,175 @@
+#!/usr/bin/env python
+# /*##########################################################################
+#
+# 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
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# ###########################################################################*/
+"""This example illustrates some usage possible with the baseline parameter
+"""
+
+__authors__ = ["H. Payno"]
+__license__ = "MIT"
+__date__ = "12/09/2019"
+
+
+from silx.gui import qt
+from silx.gui.plot import Plot1D
+import numpy
+import sys
+import argparse
+
+
+def stacked_histogran(plot, edges, histograms, colors, legend):
+ # check that we have the same number of histogram, color and baseline
+ current_baseline = numpy.zeros_like(edges)
+
+ for histogram, color, layer_index in zip(histograms, colors, range(len(colors))):
+ stacked_histo = histogram + current_baseline
+ plot.addHistogram(
+ histogram=stacked_histo,
+ edges=edges,
+ legend="_".join((legend, str(layer_index))),
+ color=color,
+ baseline=current_baseline,
+ z=len(histograms) - layer_index,
+ fill=True,
+ )
+ current_baseline = stacked_histo
+
+
+def get_plot_std(backend):
+ x = numpy.arange(0, 10, step=0.1)
+ my_sin = numpy.sin(x)
+ y = numpy.arange(-4, 6, step=0.1) + my_sin
+ mean = numpy.arange(-5, 5, step=0.1) + my_sin
+ baseline = numpy.arange(-6, 4, step=0.1) + my_sin
+ edges = x[y >= 3.0]
+ histo = mean[y >= 3.0] - 1.8
+
+ plot = Plot1D(backend=backend)
+ plot.addCurve(
+ x=x, y=y, baseline=baseline, color="grey", legend="std-curve", fill=True
+ )
+ plot.addCurve(x=x, y=mean, color="red", legend="mean")
+ plot.addHistogram(
+ histogram=histo, edges=edges, color="red", legend="mean2", fill=True
+ )
+ return plot
+
+
+def get_plot_stacked_histogram(backend):
+ plot = Plot1D(backend=backend)
+ # first histogram
+ edges = numpy.arange(-6, 6, step=0.5)
+ histo_1 = numpy.random.random(len(edges))
+ histo_2 = numpy.random.random(len(edges))
+ histo_3 = numpy.random.random(len(edges))
+ histo_4 = numpy.random.random(len(edges))
+ stacked_histogran(
+ plot=plot,
+ edges=edges,
+ histograms=(histo_1, histo_2, histo_3, histo_4),
+ colors=("blue", "green", "red", "yellow"),
+ legend="first_stacked_histo",
+ )
+
+ # second histogram
+ edges = numpy.arange(10, 25, step=1.0)
+ histo_1 = -numpy.random.random(len(edges))
+ histo_2 = -numpy.random.random(len(edges))
+ stacked_histogran(
+ plot=plot,
+ histograms=(histo_1, histo_2),
+ edges=edges,
+ colors=("gray", "black"),
+ legend="second_stacked_histo",
+ )
+
+ # last histogram
+ edges = [30, 40]
+ histograms = [
+ [0.2, 0.3],
+ [0.0, 1.0],
+ [0.1, 0.4],
+ [0.2, 0.0],
+ [0.6, 0.4],
+ ]
+ stacked_histogran(
+ plot=plot,
+ histograms=histograms,
+ edges=edges,
+ colors=("blue", "green", "red", "yellow", "cyan"),
+ legend="third_stacked_histo",
+ )
+
+ return plot
+
+
+def get_plot_mean_baseline(backend):
+ plot = Plot1D(backend=backend)
+ x = numpy.arange(0, 10, step=0.1)
+ y = numpy.sin(x)
+ plot.addCurve(x=x, y=y, baseline=0, fill=True)
+ plot.setYAxisLogarithmic(True)
+ return plot
+
+
+def get_plot_log(backend):
+ plot = Plot1D(backend=backend)
+ x = numpy.arange(0, 10, step=0.01)
+ y = numpy.exp2(x)
+ baseline = numpy.exp(x)
+ plot.addCurve(x=x, y=y, baseline=baseline, fill=True)
+ plot.setYAxisLogarithmic(True)
+ return plot
+
+
+def main(argv):
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument(
+ "--backend",
+ dest="backend",
+ action="store",
+ default=None,
+ help='Set plot backend. Should be "matplotlib" (default) or "opengl"',
+ )
+
+ options = parser.parse_args(argv[1:])
+ assert options.backend in (None, "matplotlib", "opengl")
+ qapp = qt.QApplication([])
+
+ plot_std = get_plot_std(backend=options.backend)
+ plot_std.show()
+
+ plot_mean = get_plot_mean_baseline(backend=options.backend)
+ plot_mean.show()
+
+ plot_stacked_histo = get_plot_stacked_histogram(backend=options.backend)
+ plot_stacked_histo.show()
+
+ plot_log = get_plot_log(backend=options.backend)
+ plot_log.show()
+
+ qapp.exec()
+
+
+if __name__ == "__main__":
+ main(sys.argv)