plots (empty) → 0.1.0.0
raw patch · 65 files changed
+8341/−0 lines, 65 filesdep +JuicyPixelsdep +adjunctionsdep +basesetup-changed
Dependencies added: JuicyPixels, adjunctions, base, base-orphans, colour, containers, data-default, diagrams-core, diagrams-lib, directory, distributive, filepath, fingertree, hashable, intervals, lens, linear, monoid-extras, mtl, optparse-applicative, process, profunctors, semigroupoids, semigroups, split, statistics, time, transformers, vector
Files
- LICENSE +31/−0
- README.md +42/−0
- Setup.hs +2/−0
- diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg +1/−0
- diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg +1/−0
- diagrams/src_Plots_Style_blackAndWhitePic.svg +1/−0
- diagrams/src_Plots_Style_fadedColourPic.svg +1/−0
- diagrams/src_Plots_Style_greysBar.svg +1/−0
- diagrams/src_Plots_Style_infernoBar.svg +1/−0
- diagrams/src_Plots_Style_magmaBar.svg +1/−0
- diagrams/src_Plots_Style_plasmaBar.svg +1/−0
- diagrams/src_Plots_Style_viridisBar.svg +1/−0
- diagrams/src_Plots_Style_vividColourPic.svg +1/−0
- diagrams/src_Plots_Types_Bar_barExample'.svg +1/−0
- diagrams/src_Plots_Types_Bar_barExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg +1/−0
- diagrams/src_Plots_Types_Bar_groupedBarsExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_multiBarExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_namedBarExample'.svg +1/−0
- diagrams/src_Plots_Types_Bar_namedBarExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_runningBarsExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_stackedBarsExample.svg +1/−0
- diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_heatMapExample.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg +1/−0
- diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg +1/−0
- diagrams/src_Plots_Types_Histogram_cdfDia.svg +1/−0
- diagrams/src_Plots_Types_Histogram_countDensityDia.svg +1/−0
- diagrams/src_Plots_Types_Histogram_countDia.svg +1/−0
- diagrams/src_Plots_Types_Histogram_cumilativeDia.svg +1/−0
- diagrams/src_Plots_Types_Histogram_pdfDia.svg +1/−0
- diagrams/src_Plots_Types_Histogram_probabilityDia.svg +1/−0
- diagrams/src_Plots_Types_Pie_pieExample'.svg +1/−0
- diagrams/src_Plots_Types_Pie_piePlotExample.svg +1/−0
- diagrams/src_Plots_Types_Pie_wedgeExample.svg +1/−0
- diagrams/src_Plots_Types_Scatter_scatterExample'.svg +1/−0
- diagrams/src_Plots_Types_Scatter_scatterExample.svg +1/−0
- plots.cabal +81/−0
- src/Diagrams/Coordinates/Isomorphic.hs +139/−0
- src/Diagrams/Coordinates/Polar.hs +171/−0
- src/Plots.hs +119/−0
- src/Plots/Axis.hs +541/−0
- src/Plots/Axis/ColourBar.hs +347/−0
- src/Plots/Axis/Grid.hs +256/−0
- src/Plots/Axis/Labels.hs +236/−0
- src/Plots/Axis/Line.hs +103/−0
- src/Plots/Axis/Render.hs +671/−0
- src/Plots/Axis/Scale.hs +290/−0
- src/Plots/Axis/Ticks.hs +375/−0
- src/Plots/Axis/Title.hs +112/−0
- src/Plots/Legend.hs +155/−0
- src/Plots/Name.hs +50/−0
- src/Plots/Style.hs +1104/−0
- src/Plots/Types.hs +755/−0
- src/Plots/Types/Bar.hs +658/−0
- src/Plots/Types/HeatMap.hs +598/−0
- src/Plots/Types/Histogram.hs +417/−0
- src/Plots/Types/Line.hs +177/−0
- src/Plots/Types/Pie.hs +306/−0
- src/Plots/Types/Scatter.hs +502/−0
- src/Plots/Util.hs +65/−0
+ LICENSE view
@@ -0,0 +1,31 @@+Copyright 2014: Christopher Chalmers <c.chalmers@me.com>+++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Ryan Yates nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,42 @@+# plots++[](https://cchalmers.github.io/plots/)++`plots` is a plotting library based on [diagrams](http://projects.haskell.org/diagrams).++Some sample plots:++#### Scatter plot+++#### Bar plot+++#### Heat map+++There are many more plots to be added. There are also plans to support+3D plots. Issues and pull requests welcome.++## Examples++There are several example plots in the `examples/` directory. To build+the examples, first ensure that you have `stack` installed, and that you+have a `stack.yaml` file in this directory that contains the lines:++```yaml packages:+- '.'+- 'test'+```++(If you run the command `stack init`, stack will automatically generate+the `stack.yaml` file with the appropriate packages.)++You can then build the examples using ```sh stack build stack exec+RunExamples ``` The `RunExamples` script will generate `png` files in+the `examples_output` directory.++**Note:** The `RunExamples` script re-builds an example if the output+file (`examples_output/X.png`) does not exist, or if the source file+(`examples/X.hs`) has been modified since the last time the script was+run.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="30.0000" stroke-opacity="1" viewBox="0 0 600 30" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-30.0000,300.0000,15.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(68,1,84)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(68,2,86)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(69,4,87)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(69,5,89)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(70,7,90)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(70,8,92)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(70,10,93)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(70,11,94)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(71,13,96)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(71,14,97)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(71,16,99)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(71,17,100)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(71,19,101)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(72,20,103)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(72,22,104)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(72,23,105)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(72,24,106)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(72,26,108)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(72,27,109)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(72,28,110)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(72,29,111)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(72,31,112)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(72,32,113)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(72,33,115)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(72,35,116)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(72,36,117)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(72,37,118)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(72,38,119)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(72,40,120)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(72,41,121)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(71,42,122)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(71,44,122)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(71,45,123)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(71,46,124)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(71,47,125)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(70,48,126)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(70,50,126)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(70,51,127)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(70,52,128)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(69,53,129)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(69,55,129)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(69,56,130)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(68,57,131)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(68,58,131)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(68,59,132)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(67,61,132)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(67,62,133)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(66,63,133)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(66,64,134)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(66,65,134)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(65,66,135)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(65,68,135)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(64,69,136)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(64,70,136)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(63,71,136)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(63,72,137)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(62,73,137)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(62,74,137)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(62,76,138)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(61,77,138)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(61,78,138)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(60,79,138)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(60,80,139)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(59,81,139)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(59,82,139)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(58,83,139)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(58,84,140)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(57,85,140)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(57,86,140)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(56,88,140)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(56,89,140)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(55,90,140)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(55,91,141)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(54,92,141)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(54,93,141)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(53,94,141)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(53,95,141)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(52,96,141)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(52,97,141)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(51,98,141)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(51,99,141)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(50,100,142)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(50,101,142)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(49,102,142)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(49,103,142)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(49,104,142)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(48,105,142)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(48,106,142)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(47,107,142)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(47,108,142)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(46,109,142)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(46,110,142)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(46,111,142)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(45,112,142)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(45,113,142)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(44,113,142)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(44,114,142)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(44,115,142)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(43,116,142)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(43,117,142)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(42,118,142)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(42,119,142)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(42,120,142)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(41,121,142)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(41,122,142)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(41,123,142)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(40,124,142)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(40,125,142)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(39,126,142)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(39,127,142)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(39,128,142)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(38,129,142)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(37,131,142)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(37,132,142)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(37,133,142)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(36,134,142)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(36,135,142)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(35,136,142)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(35,137,142)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(35,138,141)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(34,139,141)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(34,140,141)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(34,141,141)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(33,142,141)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(33,143,141)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(33,144,141)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(33,145,140)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(32,147,140)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(31,148,140)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(31,149,139)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(31,150,139)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(31,151,139)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(31,152,139)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(31,153,138)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(31,154,138)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(30,155,138)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(30,156,137)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(30,157,137)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(31,158,137)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(31,159,136)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(31,160,136)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(31,161,136)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(31,161,135)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(31,162,135)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(32,163,134)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(32,164,134)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(33,165,133)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(33,166,133)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(34,167,133)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(34,168,132)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(35,169,131)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(36,170,131)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(37,171,130)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(37,172,130)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(38,173,129)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(39,173,129)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(40,174,128)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(41,175,127)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(42,176,127)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(44,177,126)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(45,178,125)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(46,179,124)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(47,180,124)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(49,181,123)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(50,182,122)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(52,182,121)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(53,183,121)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(55,184,120)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(56,185,119)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(58,186,118)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(59,187,117)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(61,188,116)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(63,188,115)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(64,189,114)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(66,190,113)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(68,191,112)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(70,192,111)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(72,193,110)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(74,193,109)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(76,194,108)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(78,195,107)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(80,196,106)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(82,197,105)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(84,197,104)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(86,198,103)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(88,199,101)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(90,200,100)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(92,200,99)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(94,201,98)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(96,202,96)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(99,203,95)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(101,203,94)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(103,204,92)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(105,205,91)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(108,205,90)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(110,206,88)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(112,207,87)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(115,208,86)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(117,208,84)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(119,209,83)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(122,209,81)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(124,210,80)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(127,211,78)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(129,211,77)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(132,212,75)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(134,213,73)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(137,213,72)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(139,214,70)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(142,214,69)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(144,215,67)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(147,215,65)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(149,216,64)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(152,216,62)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(155,217,60)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(157,217,59)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(160,218,57)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(162,218,55)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(165,219,54)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(168,219,52)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(170,220,50)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(173,220,48)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(176,221,47)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(178,221,45)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(181,222,43)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(184,222,41)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(186,222,40)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(189,223,38)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(192,223,37)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(194,223,35)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(197,224,33)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(200,224,32)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(202,225,31)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(205,225,29)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(208,225,28)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(210,226,27)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(213,226,26)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(216,226,25)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(218,227,25)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(221,227,24)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(223,227,24)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(226,228,24)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(229,228,25)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(231,228,25)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(234,229,26)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(236,229,27)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(239,229,28)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(241,229,29)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(244,230,30)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(246,230,32)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(248,230,33)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(251,231,35)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(253,231,37)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,30.0000 l -0.0000,-30.0000 h -600.0000 l -0.0000,30.0000 Z"/></g></svg>
+ diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="30.0000" stroke-opacity="1" viewBox="0 0 600 30" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(221,227,24)"><path d="M 600.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(154,217,61)"><path d="M 540.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><path d="M 480.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(47,180,124)"><path d="M 420.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(30,156,137)"><path d="M 360.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(37,132,142)"><path d="M 300.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(47,108,142)"><path d="M 240.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><path d="M 180.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(70,52,128)"><path d="M 120.0000,30.0000 l -0.0000,-30.0000 h -90.0000 l -0.0000,30.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(72,20,102)"><path d="M 60.0000,30.0000 l -0.0000,-30.0000 h -60.0000 l -0.0000,30.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_blackAndWhitePic.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="76.5099" stroke-opacity="1" viewBox="0 0 600 77" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-dashoffset="0.0" stroke-dasharray="39.53480523180624,13.17826841060208"><path d="M 553.1872,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(203,203,203)" fill="rgb(255,255,255)"><path d="M 550.1123,28.9922 l 9.6641,-28.9922 l 9.6641,28.9922 l 30.5596,0.2320 l -24.5869,18.1502 l 9.2228,29.1356 l -24.8596,-17.7748 l -24.8596,17.7748 l 9.2228,-29.1356 l -24.5869,-18.1502 Z"/></g><g stroke-dashoffset="0.0" stroke-dasharray="39.53480523180624,39.53480523180624"><path d="M 474.0877,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(170,170,170)" fill="rgb(255,255,255)"><path d="M 492.7569,26.1749 l -0.0000,-24.1602 h -24.1602 l -0.0000,24.1602 l -24.1602,0.0000 l -0.0000,24.1602 l 24.1602,0.0000 l -0.0000,24.1602 l 24.1602,0.0000 l 0.0000,-24.1602 l 24.1602,0.0000 l 0.0000,-24.1602 Z"/></g><g><path d="M 401.0442,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(124,124,124)" fill="rgb(255,255,255)"><path d="M 407.6333,21.1711 l -17.0838,-17.0838 l -17.0838,17.0838 l 17.0838,17.0838 l -17.0838,17.0838 l 17.0838,17.0838 l 17.0838,-17.0838 l 17.0838,17.0838 l 17.0838,-17.0838 l -17.0838,-17.0838 l 17.0838,-17.0838 l -17.0838,-17.0838 Z"/></g><g stroke-dashoffset="0.0" stroke-dasharray="39.53480523180624,52.71307364240832,19.76740261590312"><path d="M 329.0581,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(0,0,0)" fill="rgb(255,255,255)"><path d="M 357.3914,71.7157 l 13.4386,-41.3598 l -35.1828,-25.5618 l -35.1828,25.5618 l 13.4386,41.3598 Z"/></g><g stroke-dashoffset="0.0" stroke-dasharray="13.17826841060208,13.17826841060208"><path d="M 254.9995,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(203,203,203)" fill="rgb(255,255,255)"><path d="M 297.8289,38.2550 l -36.2402,-36.2402 l -36.2402,36.2402 l 36.2402,36.2402 Z"/></g><g stroke-dashoffset="0.0" stroke-dasharray="39.53480523180624,13.17826841060208"><path d="M 179.8834,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(170,170,170)" fill="rgb(255,255,255)"><path d="M 222.7127,69.6399 l -36.2402,-62.7699 l -36.2402,62.7699 Z"/></g><g stroke-dashoffset="0.0" stroke-dasharray="39.53480523180624,39.53480523180624"><path d="M 104.7672,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(124,124,124)" fill="rgb(255,255,255)"><path d="M 147.5966,74.4952 l -0.0000,-72.4805 h -72.4805 l -0.0000,72.4805 Z"/></g><g><path d="M 29.6511,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(0,0,0)" fill="rgb(255,255,255)"><path d="M 72.4805,38.2550 c 0.0000,-20.0149 -16.2253,-36.2402 -36.2402 -36.2402c -20.0149,-0.0000 -36.2402,16.2253 -36.2402 36.2402c -0.0000,20.0149 16.2253,36.2402 36.2402 36.2402c 20.0149,0.0000 36.2402,-16.2253 36.2402 -36.2402Z"/></g></svg>
+ diagrams/src_Plots_Style_fadedColourPic.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="76.5099" stroke-opacity="1" viewBox="0 0 600 77" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-opacity="1.0" stroke="rgb(153,153,153)" stroke-width="3.0"><path d="M 553.1872,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(153,153,153)" stroke-width="1.0" fill="rgb(167,167,167)"><path d="M 550.1123,28.9922 l 9.6641,-28.9922 l 9.6641,28.9922 l 30.5596,0.2320 l -24.5869,18.1502 l 9.2228,29.1356 l -24.8596,-17.7748 l -24.8596,17.7748 l 9.2228,-29.1356 l -24.5869,-18.1502 Z"/></g><g stroke-opacity="1.0" stroke="rgb(247,129,191)" stroke-width="3.0"><path d="M 474.0877,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(247,129,191)" stroke-width="1.0" fill="rgb(248,148,199)"><path d="M 492.7569,26.1749 l -0.0000,-24.1602 h -24.1602 l -0.0000,24.1602 l -24.1602,0.0000 l -0.0000,24.1602 l 24.1602,0.0000 l -0.0000,24.1602 l 24.1602,0.0000 l 0.0000,-24.1602 l 24.1602,0.0000 l 0.0000,-24.1602 Z"/></g><g stroke-opacity="1.0" stroke="rgb(166,86,40)" stroke-width="3.0"><path d="M 401.0442,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(166,86,40)" stroke-width="1.0" fill="rgb(178,119,97)"><path d="M 407.6333,21.1711 l -17.0838,-17.0838 l -17.0838,17.0838 l 17.0838,17.0838 l -17.0838,17.0838 l 17.0838,17.0838 l 17.0838,-17.0838 l 17.0838,17.0838 l 17.0838,-17.0838 l -17.0838,-17.0838 l 17.0838,-17.0838 l -17.0838,-17.0838 Z"/></g><g stroke-opacity="1.0" stroke="rgb(255,127,0)" stroke-width="3.0"><path d="M 329.0581,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,127,0)" stroke-width="1.0" fill="rgb(255,147,89)"><path d="M 357.3914,71.7157 l 13.4386,-41.3598 l -35.1828,-25.5618 l -35.1828,25.5618 l 13.4386,41.3598 Z"/></g><g stroke-opacity="1.0" stroke="rgb(152,78,163)" stroke-width="3.0"><path d="M 254.9995,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(152,78,163)" stroke-width="1.0" fill="rgb(166,114,175)"><path d="M 297.8289,38.2550 l -36.2402,-36.2402 l -36.2402,36.2402 l 36.2402,36.2402 Z"/></g><g stroke-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="3.0"><path d="M 179.8834,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><path d="M 222.7127,69.6399 l -36.2402,-62.7699 l -36.2402,62.7699 Z"/></g><g stroke-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="3.0"><path d="M 104.7672,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><path d="M 147.5966,74.4952 l -0.0000,-72.4805 h -72.4805 l -0.0000,72.4805 Z"/></g><g stroke-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="3.0"><path d="M 29.6511,38.2550 h 13.1783 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><path d="M 72.4805,38.2550 c 0.0000,-20.0149 -16.2253,-36.2402 -36.2402 -36.2402c -20.0149,-0.0000 -36.2402,16.2253 -36.2402 36.2402c -0.0000,20.0149 16.2253,36.2402 36.2402 36.2402c 20.0149,0.0000 36.2402,-16.2253 36.2402 -36.2402Z"/></g></svg>
+ diagrams/src_Plots_Style_greysBar.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="40.0000" stroke-opacity="1" viewBox="0 0 600 40" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-40.0000,300.0000,20.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(0,0,0)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(255,255,255)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,40.0000 l -0.0000,-40.0000 h -600.0000 l -0.0000,40.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_infernoBar.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="40.0000" stroke-opacity="1" viewBox="0 0 600 40" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-40.0000,300.0000,20.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(0,0,4)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(1,0,5)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(1,1,6)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(1,1,8)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(2,1,10)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(2,2,12)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(2,2,14)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(3,2,16)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(4,3,18)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(4,3,20)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(5,4,23)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(6,4,25)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(7,5,27)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(8,5,29)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(9,6,31)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(10,7,34)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(11,7,36)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(12,8,38)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(13,8,41)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(14,9,43)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(16,9,45)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(17,10,48)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(18,10,50)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(20,11,52)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(21,11,55)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(22,11,57)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(24,12,60)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(25,12,62)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(27,12,65)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(28,12,67)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(30,12,69)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(31,12,72)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(33,12,74)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(35,12,76)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(36,12,79)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(38,12,81)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(40,11,83)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(41,11,85)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(43,11,87)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(45,11,89)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(47,10,91)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(49,10,92)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(50,10,94)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(52,10,95)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(54,9,97)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(56,9,98)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(57,9,99)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(59,9,100)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(61,9,101)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(62,9,102)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(64,10,103)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(66,10,104)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(68,10,104)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(69,10,105)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(71,11,106)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(73,11,106)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(74,12,107)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(76,12,107)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(77,13,108)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(79,13,108)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(81,14,108)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(82,14,109)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(84,15,109)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(85,15,109)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(87,16,110)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(89,16,110)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(90,17,110)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(92,18,110)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(93,18,110)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(95,19,110)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(97,19,110)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(98,20,110)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(100,21,110)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(101,21,110)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(103,22,110)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(105,22,110)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(106,23,110)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(108,24,110)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(109,24,110)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(111,25,110)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(113,25,110)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(114,26,110)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(116,26,110)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(117,27,110)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(119,28,109)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(120,28,109)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(122,29,109)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(124,29,109)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(125,30,109)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(127,30,108)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(128,31,108)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(130,32,108)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(132,32,107)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(133,33,107)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(135,33,107)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(136,34,106)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(138,34,106)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(140,35,105)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(141,35,105)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(143,36,105)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(144,37,104)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(146,37,104)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(147,38,103)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(149,38,103)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(151,39,102)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(152,39,102)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(154,40,101)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(155,41,100)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(157,41,100)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(159,42,99)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(160,42,99)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(162,43,98)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(163,44,97)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(165,44,96)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(166,45,96)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(168,46,95)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(169,46,94)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(171,47,94)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(173,48,93)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(174,48,92)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(176,49,91)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(177,50,90)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(179,50,90)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(180,51,89)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(182,52,88)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(183,53,87)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(185,53,86)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(186,54,85)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(188,55,84)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(189,56,83)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(191,57,82)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(192,58,81)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(193,58,80)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(195,59,79)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(196,60,78)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(198,61,77)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(199,62,76)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(200,63,75)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(202,64,74)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(203,65,73)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(204,66,72)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(206,67,71)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(207,68,70)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(208,69,69)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(210,70,68)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(211,71,67)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(212,72,66)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(213,74,65)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(215,75,63)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(216,76,62)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(217,77,61)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(218,78,60)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(219,80,59)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(221,81,58)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(222,82,56)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(223,83,55)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(224,85,54)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(225,86,53)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(226,87,52)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(227,89,51)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(228,90,49)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(229,92,48)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(230,93,47)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(231,94,46)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(232,96,45)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(233,97,43)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(234,99,42)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(235,100,41)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(235,102,40)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(236,103,38)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(237,105,37)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(238,106,36)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(239,108,35)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(239,110,33)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(240,111,32)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(241,113,31)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(241,115,29)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(242,116,28)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(243,118,27)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(243,120,25)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(244,121,24)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(245,123,23)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(245,125,21)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(246,126,20)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(246,128,19)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(247,130,18)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(247,132,16)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(248,133,15)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(248,135,14)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(248,137,12)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(249,139,11)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(249,140,10)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(249,142,9)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(250,144,8)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(250,146,7)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(250,148,7)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(251,150,6)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(251,151,6)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(251,153,6)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(251,155,6)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(251,157,7)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(252,159,7)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(252,161,8)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(252,163,9)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(252,165,10)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(252,166,12)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(252,168,13)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(252,170,15)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(252,172,17)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(252,174,18)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(252,176,20)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(252,178,22)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(252,180,24)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(251,182,26)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(251,184,29)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(251,186,31)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(251,188,33)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(251,190,35)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(250,192,38)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(250,194,40)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(250,196,42)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(250,198,45)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(249,199,47)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(249,201,50)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(249,203,53)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(248,205,55)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(248,207,58)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(247,209,61)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(247,211,64)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(246,213,67)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(246,215,70)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(245,217,73)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(245,219,76)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(244,221,79)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(244,223,83)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(244,225,86)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(243,227,90)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(243,229,93)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(242,230,97)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(242,232,101)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(242,234,105)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(241,236,109)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(241,237,113)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(241,239,117)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(241,241,121)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(242,242,125)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(242,244,130)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(243,245,134)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(243,246,138)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(244,248,142)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(245,249,146)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(246,250,150)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(248,251,154)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(249,252,157)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(250,253,161)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(252,255,164)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,40.0000 l -0.0000,-40.0000 h -600.0000 l -0.0000,40.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_magmaBar.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="40.0000" stroke-opacity="1" viewBox="0 0 600 40" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-40.0000,300.0000,20.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(0,0,4)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(1,0,5)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(1,1,6)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(1,1,8)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(2,1,9)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(2,2,11)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(2,2,13)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(3,3,15)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(3,3,18)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(4,4,20)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(5,4,22)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(6,5,24)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(6,5,26)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(7,6,28)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(8,7,30)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(9,7,32)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(10,8,34)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(11,9,36)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(12,9,38)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(13,10,41)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(14,11,43)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(16,11,45)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(17,12,47)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(18,13,49)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(19,13,52)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(20,14,54)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(21,14,56)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(22,15,59)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(24,15,61)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(25,16,63)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(26,16,66)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(28,16,68)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(29,17,71)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(30,17,73)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(32,17,75)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(33,17,78)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(34,17,80)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(36,18,83)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(37,18,85)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(39,18,88)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(41,17,90)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(42,17,92)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(44,17,95)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(45,17,97)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(47,17,99)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(49,17,101)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(51,16,103)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(52,16,105)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(54,16,107)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(56,16,108)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(57,15,110)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(59,15,112)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(61,15,113)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(63,15,114)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(64,15,116)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(66,15,117)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(68,15,118)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(69,16,119)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(71,16,120)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(73,16,120)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(74,16,121)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(76,17,122)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(78,17,123)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(79,18,123)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(81,18,124)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(82,19,124)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(84,19,125)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(86,20,125)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(87,21,126)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(89,21,126)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(90,22,126)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(92,22,127)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(93,23,127)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(95,24,127)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(96,24,128)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(98,25,128)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(100,26,128)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(101,26,128)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(103,27,128)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(104,28,129)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(106,28,129)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(107,29,129)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(109,29,129)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(110,30,129)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(112,31,129)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(114,31,129)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(115,32,129)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(117,33,129)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(118,33,129)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(120,34,129)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(121,34,130)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(123,35,130)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(124,35,130)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(126,36,130)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(128,37,130)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(129,37,129)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(131,38,129)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(132,38,129)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(134,39,129)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(136,39,129)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(137,40,129)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(139,41,129)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(140,41,129)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(142,42,129)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(144,42,129)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(145,43,129)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(147,43,128)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(148,44,128)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(150,44,128)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(152,45,128)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(153,45,128)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(155,46,127)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(156,46,127)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(158,47,127)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(160,47,127)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(161,48,126)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(163,48,126)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(165,49,126)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(166,49,125)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(168,50,125)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(170,51,125)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(171,51,124)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(173,52,124)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(174,52,123)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(176,53,123)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(178,53,123)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(179,54,122)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(181,54,122)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(183,55,121)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(184,55,121)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(186,56,120)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(188,57,120)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(189,57,119)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(191,58,119)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(192,58,118)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(194,59,117)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(196,60,117)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(197,60,116)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(199,61,115)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(200,62,115)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(202,62,114)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(204,63,113)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(205,64,113)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(207,64,112)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(208,65,111)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(210,66,111)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(211,67,110)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(213,68,109)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(214,69,108)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(216,69,108)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(217,70,107)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(219,71,106)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(220,72,105)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(222,73,104)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(223,74,104)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(224,76,103)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(226,77,102)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(227,78,101)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(228,79,100)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(229,80,100)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(231,82,99)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(232,83,98)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(233,84,98)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(234,86,97)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(235,87,96)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(236,88,96)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(237,90,95)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(238,91,94)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(239,93,94)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(240,95,94)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(241,96,93)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(242,98,93)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(242,100,92)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(243,101,92)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(244,103,92)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(244,105,92)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(245,107,92)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(246,108,92)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(246,110,92)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(247,112,92)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(247,114,92)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(248,116,92)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(248,118,92)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(249,120,93)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(249,121,93)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(249,123,93)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(250,125,94)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(250,127,94)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(250,129,95)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(251,131,95)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(251,133,96)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(251,135,97)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(252,137,97)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(252,138,98)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(252,140,99)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(252,142,100)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(252,144,101)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(253,146,102)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(253,148,103)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(253,150,104)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(253,152,105)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(253,154,106)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(253,155,107)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(254,157,108)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(254,159,109)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(254,161,110)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(254,163,111)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(254,165,113)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(254,167,114)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(254,169,115)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(254,170,116)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(254,172,118)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(254,174,119)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(254,176,120)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(254,178,122)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(254,180,123)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(254,182,124)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(254,183,126)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(254,185,127)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(254,187,129)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(254,189,130)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(254,191,132)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(254,193,133)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(254,194,135)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(254,196,136)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(254,198,138)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(254,200,140)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(254,202,141)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(254,204,143)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(254,205,144)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(254,207,146)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(254,209,148)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(254,211,149)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(254,213,151)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(254,215,153)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(254,216,154)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(253,218,156)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(253,220,158)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(253,222,160)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(253,224,161)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(253,226,163)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(253,227,165)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(253,229,167)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(253,231,169)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(253,233,170)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(253,235,172)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(252,236,174)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(252,238,176)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(252,240,178)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(252,242,180)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(252,244,182)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(252,246,184)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(252,247,185)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(252,249,187)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(252,251,189)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(252,253,191)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,40.0000 l -0.0000,-40.0000 h -600.0000 l -0.0000,40.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_plasmaBar.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="40.0000" stroke-opacity="1" viewBox="0 0 600 40" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-40.0000,300.0000,20.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(13,8,135)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(16,7,136)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(19,7,137)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(22,7,138)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(25,6,140)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(27,6,141)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(29,6,142)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(32,6,143)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(34,6,144)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(36,6,145)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(38,5,145)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(40,5,146)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(42,5,147)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(44,5,148)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(46,5,149)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(47,5,150)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(49,5,151)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(51,5,151)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(53,4,152)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(55,4,153)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(56,4,154)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(58,4,154)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(60,4,155)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(62,4,156)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(63,4,156)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(65,4,157)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(67,3,158)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(68,3,158)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(70,3,159)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(72,3,159)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(73,3,160)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(75,3,161)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(76,2,161)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(78,2,162)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(80,2,162)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(81,2,163)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(83,2,163)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(85,2,164)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(86,1,164)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(88,1,164)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(89,1,165)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(91,1,165)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(92,1,166)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(94,1,166)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(96,1,166)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(97,0,167)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(99,0,167)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(100,0,167)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(102,0,167)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(103,0,168)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(105,0,168)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(106,0,168)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(108,0,168)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(110,0,168)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(111,0,168)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(113,0,168)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(114,1,168)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(116,1,168)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(117,1,168)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(119,1,168)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(120,1,168)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(122,2,168)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(123,2,168)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(125,3,168)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(126,3,168)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(128,4,168)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(129,4,167)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(131,5,167)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(132,5,167)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(134,6,166)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(135,7,166)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(136,8,166)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(138,9,165)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(139,10,165)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(141,11,165)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(142,12,164)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(143,13,164)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(145,14,163)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(146,15,163)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(148,16,162)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(149,17,161)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(150,19,161)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(152,20,160)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(153,21,159)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(154,22,159)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(156,23,158)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(157,24,157)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(158,25,157)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(160,26,156)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(161,27,155)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(162,29,154)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(163,30,154)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(165,31,153)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(166,32,152)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(167,33,151)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(168,34,150)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(170,35,149)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(171,36,148)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(172,38,148)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(173,39,147)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(174,40,146)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(176,41,145)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(177,42,144)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(178,43,143)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(179,44,142)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(180,46,141)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(181,47,140)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(182,48,139)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(183,49,138)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(184,50,137)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(186,51,136)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(187,52,136)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(188,53,135)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(189,55,134)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(190,56,133)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(191,57,132)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(192,58,131)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(193,59,130)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(194,60,129)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(195,61,128)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(196,62,127)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(197,64,126)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(198,65,125)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(199,66,124)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(200,67,123)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(201,68,122)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(202,69,122)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(203,70,121)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(204,71,120)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(204,73,119)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(205,74,118)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(206,75,117)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(207,76,116)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(208,77,115)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(209,78,114)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(210,79,113)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(211,81,113)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(212,82,112)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(213,83,111)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(213,84,110)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(214,85,109)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(215,86,108)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(216,87,107)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(217,88,106)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(218,90,106)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(218,91,105)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(219,92,104)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(220,93,103)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(221,94,102)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(222,95,101)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(222,97,100)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(223,98,99)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(224,99,99)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(225,100,98)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(226,101,97)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(226,102,96)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(227,104,95)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(228,105,94)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(229,106,93)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(229,107,93)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(230,108,92)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(231,110,91)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(231,111,90)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(232,112,89)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(233,113,88)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(233,114,87)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(234,116,87)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(235,117,86)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(235,118,85)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(236,119,84)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(237,121,83)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(237,122,82)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(238,123,81)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(239,124,81)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(239,126,80)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(240,127,79)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(240,128,78)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(241,129,77)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(241,131,76)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(242,132,75)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(243,133,75)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(243,135,74)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(244,136,73)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(244,137,72)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(245,139,71)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(245,140,70)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(246,141,69)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(246,143,68)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(247,144,68)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(247,145,67)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(247,147,66)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(248,148,65)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(248,149,64)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(249,151,63)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(249,152,62)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(249,154,62)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(250,155,61)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(250,156,60)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(250,158,59)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(251,159,58)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(251,161,57)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(251,162,56)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(252,163,56)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(252,165,55)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(252,166,54)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(252,168,53)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(252,169,52)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(253,171,51)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(253,172,51)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(253,174,50)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(253,175,49)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(253,177,48)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(253,178,47)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(253,180,47)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(253,181,46)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(254,183,45)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(254,184,44)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(254,186,44)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(254,187,43)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(254,189,42)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(254,190,42)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(254,192,41)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(253,194,41)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(253,195,40)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(253,197,39)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(253,198,39)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(253,200,39)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(253,202,38)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(253,203,38)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(252,205,37)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(252,206,37)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(252,208,37)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(252,210,37)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(251,211,36)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(251,213,36)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(251,215,36)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(250,216,36)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(250,218,36)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(249,220,36)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(249,221,37)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(248,223,37)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(248,225,37)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(247,226,37)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(247,228,37)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(246,230,38)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(246,232,38)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(245,233,38)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(245,235,39)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(244,237,39)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(243,238,39)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(243,240,39)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(242,242,39)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(241,244,38)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(241,245,37)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(240,247,36)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(240,249,33)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,40.0000 l -0.0000,-40.0000 h -600.0000 l -0.0000,40.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_viridisBar.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="40.0000" stroke-opacity="1" viewBox="0 0 600 40" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(600.0000,-0.0000,0.0000,-40.0000,300.0000,20.0000)" id="gradient0" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(68,1,84)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(68,2,86)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(69,4,87)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(69,5,89)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(70,7,90)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(70,8,92)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(70,10,93)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(70,11,94)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(71,13,96)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(71,14,97)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(71,16,99)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(71,17,100)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(71,19,101)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(72,20,103)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(72,22,104)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(72,23,105)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(72,24,106)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(72,26,108)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(72,27,109)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(72,28,110)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(72,29,111)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(72,31,112)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(72,32,113)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(72,33,115)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(72,35,116)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(72,36,117)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(72,37,118)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(72,38,119)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(72,40,120)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(72,41,121)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(71,42,122)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(71,44,122)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(71,45,123)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(71,46,124)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(71,47,125)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(70,48,126)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(70,50,126)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(70,51,127)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(70,52,128)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(69,53,129)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(69,55,129)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(69,56,130)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(68,57,131)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(68,58,131)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(68,59,132)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(67,61,132)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(67,62,133)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(66,63,133)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(66,64,134)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(66,65,134)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(65,66,135)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(65,68,135)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(64,69,136)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(64,70,136)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(63,71,136)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(63,72,137)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(62,73,137)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(62,74,137)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(62,76,138)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(61,77,138)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(61,78,138)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(60,79,138)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(60,80,139)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(59,81,139)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(59,82,139)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(58,83,139)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(58,84,140)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(57,85,140)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(57,86,140)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(56,88,140)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(56,89,140)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(55,90,140)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(55,91,141)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(54,92,141)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(54,93,141)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(53,94,141)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(53,95,141)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(52,96,141)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(52,97,141)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(51,98,141)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(51,99,141)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(50,100,142)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(50,101,142)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(49,102,142)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(49,103,142)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(49,104,142)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(48,105,142)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(48,106,142)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(47,107,142)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(47,108,142)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(46,109,142)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(46,110,142)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(46,111,142)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(45,112,142)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(45,113,142)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(44,113,142)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(44,114,142)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(44,115,142)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(43,116,142)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(43,117,142)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(42,118,142)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(42,119,142)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(42,120,142)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(41,121,142)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(41,122,142)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(41,123,142)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(40,124,142)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(40,125,142)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(39,126,142)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(39,127,142)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(39,128,142)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(38,129,142)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(37,131,142)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(37,132,142)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(37,133,142)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(36,134,142)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(36,135,142)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(35,136,142)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(35,137,142)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(35,138,141)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(34,139,141)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(34,140,141)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(34,141,141)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(33,142,141)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(33,143,141)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(33,144,141)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(33,145,140)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(32,147,140)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(31,148,140)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(31,149,139)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(31,150,139)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(31,151,139)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(31,152,139)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(31,153,138)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(31,154,138)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(30,155,138)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(30,156,137)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(30,157,137)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(31,158,137)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(31,159,136)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(31,160,136)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(31,161,136)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(31,161,135)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(31,162,135)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(32,163,134)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(32,164,134)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(33,165,133)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(33,166,133)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(34,167,133)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(34,168,132)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(35,169,131)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(36,170,131)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(37,171,130)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(37,172,130)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(38,173,129)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(39,173,129)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(40,174,128)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(41,175,127)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(42,176,127)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(44,177,126)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(45,178,125)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(46,179,124)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(47,180,124)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(49,181,123)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(50,182,122)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(52,182,121)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(53,183,121)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(55,184,120)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(56,185,119)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(58,186,118)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(59,187,117)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(61,188,116)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(63,188,115)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(64,189,114)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(66,190,113)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(68,191,112)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(70,192,111)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(72,193,110)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(74,193,109)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(76,194,108)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(78,195,107)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(80,196,106)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(82,197,105)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(84,197,104)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(86,198,103)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(88,199,101)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(90,200,100)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(92,200,99)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(94,201,98)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(96,202,96)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(99,203,95)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(101,203,94)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(103,204,92)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(105,205,91)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(108,205,90)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(110,206,88)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(112,207,87)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(115,208,86)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(117,208,84)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(119,209,83)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(122,209,81)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(124,210,80)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(127,211,78)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(129,211,77)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(132,212,75)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(134,213,73)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(137,213,72)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(139,214,70)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(142,214,69)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(144,215,67)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(147,215,65)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(149,216,64)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(152,216,62)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(155,217,60)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(157,217,59)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(160,218,57)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(162,218,55)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(165,219,54)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(168,219,52)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(170,220,50)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(173,220,48)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(176,221,47)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(178,221,45)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(181,222,43)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(184,222,41)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(186,222,40)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(189,223,38)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(192,223,37)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(194,223,35)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(197,224,33)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(200,224,32)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(202,225,31)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(205,225,29)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(208,225,28)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(210,226,27)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(213,226,26)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(216,226,25)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(218,227,25)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(221,227,24)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(223,227,24)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(226,228,24)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(229,228,25)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(231,228,25)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(234,229,26)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(236,229,27)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(239,229,28)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(241,229,29)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(244,230,30)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(246,230,32)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(248,230,33)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(251,231,35)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(253,231,37)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient0)"><path d="M 600.0000,40.0000 l -0.0000,-40.0000 h -600.0000 l -0.0000,40.0000 Z"/></g></svg>
+ diagrams/src_Plots_Style_vividColourPic.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="76.9040" stroke-opacity="1" viewBox="0 0 600 77" font-size="1" width="600.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-opacity="1.0" stroke="rgb(102,102,102)" stroke-width="3.0"><path d="M 554.0499,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(102,102,102)"><path d="M 549.8553,29.1415 l 9.7138,-29.1415 l 9.7138,29.1415 l 30.7170,0.2332 l -24.7135,18.2436 l 9.2703,29.2857 l -24.9876,-17.8663 l -24.9876,17.8663 l 9.2703,-29.2857 l -24.7135,-18.2436 Z"/></g><g stroke-opacity="1.0" stroke="rgb(166,118,29)" stroke-width="3.0"><path d="M 474.9845,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(166,118,29)"><path d="M 492.6460,26.3097 l -0.0000,-24.2846 h -24.2846 l -0.0000,24.2846 l -24.2846,0.0000 l -0.0000,24.2846 l 24.2846,0.0000 l -0.0000,24.2846 l 24.2846,0.0000 l 0.0000,-24.2846 l 24.2846,0.0000 l 0.0000,-24.2846 Z"/></g><g stroke-opacity="1.0" stroke="rgb(230,171,2)" stroke-width="3.0"><path d="M 402.0062,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(230,171,2)"><path d="M 407.5255,21.2802 l -17.1718,-17.1718 l -17.1718,17.1718 l 17.1718,17.1718 l -17.1718,17.1718 l 17.1718,17.1718 l 17.1718,-17.1718 l 17.1718,17.1718 l 17.1718,-17.1718 l -17.1718,-17.1718 l 17.1718,-17.1718 l -17.1718,-17.1718 Z"/></g><g stroke-opacity="1.0" stroke="rgb(102,166,30)" stroke-width="3.0"><path d="M 330.0909,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(102,166,30)"><path d="M 357.4663,72.0852 l 13.5078,-41.5729 l -35.3640,-25.6934 l -35.3640,25.6934 l 13.5078,41.5729 Z"/></g><g stroke-opacity="1.0" stroke="rgb(231,41,138)" stroke-width="3.0"><path d="M 256.0923,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(231,41,138)"><path d="M 298.0385,38.4520 l -36.4269,-36.4269 l -36.4269,36.4269 l 36.4269,36.4269 Z"/></g><g stroke-opacity="1.0" stroke="rgb(117,112,179)" stroke-width="3.0"><path d="M 181.0308,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(117,112,179)"><path d="M 222.9769,69.9987 l -36.4269,-63.0933 l -36.4269,63.0933 Z"/></g><g stroke-opacity="1.0" stroke="rgb(217,95,2)" stroke-width="3.0"><path d="M 105.9692,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(217,95,2)"><path d="M 147.9154,74.8789 l -0.0000,-72.8538 h -72.8538 l -0.0000,72.8538 Z"/></g><g stroke-opacity="1.0" stroke="rgb(27,158,119)" stroke-width="3.0"><path d="M 30.9077,38.4520 h 11.0385 "/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(255,255,255)" stroke-width="1.0" fill="rgb(27,158,119)"><path d="M 72.8538,38.4520 c 0.0000,-20.1180 -16.3089,-36.4269 -36.4269 -36.4269c -20.1180,-0.0000 -36.4269,16.3089 -36.4269 36.4269c -0.0000,20.1180 16.3089,36.4269 36.4269 36.4269c 20.1180,0.0000 36.4269,-16.3089 36.4269 -36.4269Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_barExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 388 400" font-size="1" width="388.2812" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-linecap="square"><path d="M 40.6250,359.3750 v -312.5000 M 353.1250,359.3750 v -312.5000 "/></g><g stroke-width="0.4"><path d="M 353.1250,356.8432 h 2.3438 M 353.1250,347.8009 h 2.3438 M 353.1250,338.7587 h 2.3438 M 353.1250,329.7164 h 2.3438 M 353.1250,320.6742 h 2.3438 M 353.1250,302.5897 h 2.3438 M 353.1250,293.5475 h 2.3438 M 353.1250,284.5052 h 2.3438 M 353.1250,275.4630 h 2.3438 M 353.1250,266.4207 h 2.3438 M 353.1250,248.3362 h 2.3438 M 353.1250,239.2940 h 2.3438 M 353.1250,230.2517 h 2.3438 M 353.1250,221.2095 h 2.3438 M 353.1250,212.1672 h 2.3438 M 353.1250,194.0828 h 2.3438 M 353.1250,185.0405 h 2.3438 M 353.1250,175.9983 h 2.3438 M 353.1250,166.9560 h 2.3438 M 353.1250,157.9138 h 2.3438 M 353.1250,139.8293 h 2.3438 M 353.1250,130.7870 h 2.3438 M 353.1250,121.7448 h 2.3438 M 353.1250,112.7025 h 2.3438 M 353.1250,103.6603 h 2.3438 M 353.1250,85.5758 h 2.3438 M 353.1250,76.5336 h 2.3438 M 353.1250,67.4913 h 2.3438 M 353.1250,58.4491 h 2.3438 M 353.1250,49.4068 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 353.1250,311.6319 h 3.9062 M 353.1250,257.3785 h 3.9062 M 353.1250,203.1250 h 3.9062 M 353.1250,148.8715 h 3.9062 M 353.1250,94.6181 h 3.9062 "/></g><g stroke-width="0.4"><path d="M 38.2812,356.8432 h 2.3438 M 38.2812,347.8009 h 2.3438 M 38.2812,338.7587 h 2.3438 M 38.2812,329.7164 h 2.3438 M 38.2812,320.6742 h 2.3438 M 38.2812,302.5897 h 2.3438 M 38.2812,293.5475 h 2.3438 M 38.2812,284.5052 h 2.3438 M 38.2812,275.4630 h 2.3438 M 38.2812,266.4207 h 2.3438 M 38.2812,248.3362 h 2.3438 M 38.2812,239.2940 h 2.3438 M 38.2812,230.2517 h 2.3438 M 38.2812,221.2095 h 2.3438 M 38.2812,212.1672 h 2.3438 M 38.2812,194.0828 h 2.3438 M 38.2812,185.0405 h 2.3438 M 38.2812,175.9983 h 2.3438 M 38.2812,166.9560 h 2.3438 M 38.2812,157.9138 h 2.3438 M 38.2812,139.8293 h 2.3438 M 38.2812,130.7870 h 2.3438 M 38.2812,121.7448 h 2.3438 M 38.2812,112.7025 h 2.3438 M 38.2812,103.6603 h 2.3438 M 38.2812,85.5758 h 2.3438 M 38.2812,76.5336 h 2.3438 M 38.2812,67.4913 h 2.3438 M 38.2812,58.4491 h 2.3438 M 38.2812,49.4068 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 36.7188,311.6319 h 3.9062 M 36.7188,257.3785 h 3.9062 M 36.7188,203.1250 h 3.9062 M 36.7188,148.8715 h 3.9062 M 36.7188,94.6181 h 3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,94.6181)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,148.8715)" stroke="none" text-anchor="end">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,203.1250)" stroke="none" text-anchor="end">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,257.3785)" stroke="none" text-anchor="end">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,311.6319)" stroke="none" text-anchor="end">1.0</text></g><g stroke-width="0.8"><path d="M 40.6250,359.3750 v -312.5000 M 103.7563,359.3750 v -312.5000 M 166.8876,359.3750 v -312.5000 M 230.0189,359.3750 v -312.5000 M 293.1503,359.3750 v -312.5000 "/></g><g stroke-linecap="square"><path d="M 40.6250,359.3750 h 312.5000 M 40.6250,46.8750 h 312.5000 "/></g><g stroke-width="0.4"><path d="M 51.1469,46.8750 v -2.3438 M 61.6688,46.8750 v -2.3438 M 72.1907,46.8750 v -2.3438 M 82.7125,46.8750 v -2.3438 M 93.2344,46.8750 v -2.3438 M 114.2782,46.8750 v -2.3438 M 124.8001,46.8750 v -2.3438 M 135.3220,46.8750 v -2.3438 M 145.8439,46.8750 v -2.3438 M 156.3657,46.8750 v -2.3438 M 177.4095,46.8750 v -2.3438 M 187.9314,46.8750 v -2.3438 M 198.4533,46.8750 v -2.3438 M 208.9752,46.8750 v -2.3438 M 219.4971,46.8750 v -2.3438 M 240.5408,46.8750 v -2.3438 M 251.0627,46.8750 v -2.3438 M 261.5846,46.8750 v -2.3438 M 272.1065,46.8750 v -2.3438 M 282.6284,46.8750 v -2.3438 M 303.6721,46.8750 v -2.3438 M 314.1940,46.8750 v -2.3438 M 324.7159,46.8750 v -2.3438 M 335.2378,46.8750 v -2.3438 M 345.7597,46.8750 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 40.6250,46.8750 v -3.9062 M 103.7563,46.8750 v -3.9062 M 166.8876,46.8750 v -3.9062 M 230.0189,46.8750 v -3.9062 M 293.1503,46.8750 v -3.9062 "/></g><g stroke-width="0.4"><path d="M 51.1469,361.7187 v -2.3438 M 61.6688,361.7187 v -2.3438 M 72.1907,361.7187 v -2.3438 M 82.7125,361.7187 v -2.3438 M 93.2344,361.7187 v -2.3438 M 114.2782,361.7187 v -2.3438 M 124.8001,361.7187 v -2.3438 M 135.3220,361.7187 v -2.3438 M 145.8439,361.7187 v -2.3438 M 156.3657,361.7187 v -2.3438 M 177.4095,361.7187 v -2.3438 M 187.9314,361.7187 v -2.3438 M 198.4533,361.7187 v -2.3438 M 208.9752,361.7187 v -2.3438 M 219.4971,361.7187 v -2.3438 M 240.5408,361.7187 v -2.3438 M 251.0627,361.7187 v -2.3438 M 261.5846,361.7187 v -2.3438 M 272.1065,361.7187 v -2.3438 M 282.6284,361.7187 v -2.3438 M 303.6721,361.7187 v -2.3438 M 314.1940,361.7187 v -2.3438 M 324.7159,361.7187 v -2.3438 M 335.2378,361.7187 v -2.3438 M 345.7597,361.7187 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 40.6250,363.2812 v -3.9062 M 103.7563,363.2812 v -3.9062 M 166.8876,363.2812 v -3.9062 M 230.0189,363.2812 v -3.9062 M 293.1503,363.2812 v -3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,293.1503,368.7500)" stroke="none" text-anchor="middle">12.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,230.0189,368.7500)" stroke="none" text-anchor="middle">9.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.8876,368.7500)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,103.7563,368.7500)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,40.6250,368.7500)" stroke="none" text-anchor="middle">0.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 40.6250,116.3194 v -43.4028 h 96.8013 v 43.4028 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 40.6250,170.5729 v -43.4028 h 151.5152 v 43.4028 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 40.6250,224.8264 v -43.4028 h 145.2020 v 43.4028 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 40.6250,279.0799 v -43.4028 h 63.1313 v 43.4028 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 40.6250,333.3333 v -43.4028 h 284.0909 v 43.4028 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,196.8750,31.2500)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Bar_barExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 388 400" font-size="1" width="388.2812" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-linecap="square"><path d="M 40.6250,359.3750 v -312.5000 M 353.1250,359.3750 v -312.5000 "/></g><g stroke-width="0.4"><path d="M 353.1250,348.8531 h 2.3438 M 353.1250,338.3312 h 2.3438 M 353.1250,327.8093 h 2.3438 M 353.1250,317.2875 h 2.3438 M 353.1250,306.7656 h 2.3438 M 353.1250,285.7218 h 2.3438 M 353.1250,275.1999 h 2.3438 M 353.1250,264.6780 h 2.3438 M 353.1250,254.1561 h 2.3438 M 353.1250,243.6343 h 2.3438 M 353.1250,222.5905 h 2.3438 M 353.1250,212.0686 h 2.3438 M 353.1250,201.5467 h 2.3438 M 353.1250,191.0248 h 2.3438 M 353.1250,180.5029 h 2.3438 M 353.1250,159.4592 h 2.3438 M 353.1250,148.9373 h 2.3438 M 353.1250,138.4154 h 2.3438 M 353.1250,127.8935 h 2.3438 M 353.1250,117.3716 h 2.3438 M 353.1250,96.3279 h 2.3438 M 353.1250,85.8060 h 2.3438 M 353.1250,75.2841 h 2.3438 M 353.1250,64.7622 h 2.3438 M 353.1250,54.2403 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 353.1250,359.3750 h 3.9062 M 353.1250,296.2437 h 3.9062 M 353.1250,233.1124 h 3.9062 M 353.1250,169.9811 h 3.9062 M 353.1250,106.8497 h 3.9062 "/></g><g stroke-width="0.4"><path d="M 38.2813,348.8531 h 2.3438 M 38.2813,338.3312 h 2.3438 M 38.2813,327.8093 h 2.3438 M 38.2813,317.2875 h 2.3438 M 38.2813,306.7656 h 2.3438 M 38.2813,285.7218 h 2.3438 M 38.2813,275.1999 h 2.3438 M 38.2813,264.6780 h 2.3438 M 38.2813,254.1561 h 2.3438 M 38.2813,243.6343 h 2.3438 M 38.2813,222.5905 h 2.3438 M 38.2813,212.0686 h 2.3438 M 38.2813,201.5467 h 2.3438 M 38.2813,191.0248 h 2.3438 M 38.2813,180.5029 h 2.3438 M 38.2813,159.4592 h 2.3438 M 38.2813,148.9373 h 2.3438 M 38.2813,138.4154 h 2.3438 M 38.2813,127.8935 h 2.3438 M 38.2813,117.3716 h 2.3438 M 38.2813,96.3279 h 2.3438 M 38.2813,85.8060 h 2.3438 M 38.2813,75.2841 h 2.3438 M 38.2813,64.7622 h 2.3438 M 38.2813,54.2403 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 36.7188,359.3750 h 3.9062 M 36.7188,296.2437 h 3.9062 M 36.7188,233.1124 h 3.9062 M 36.7188,169.9811 h 3.9062 M 36.7188,106.8497 h 3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,106.8497)" stroke="none" text-anchor="end">12.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,169.9811)" stroke="none" text-anchor="end">9.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,233.1124)" stroke="none" text-anchor="end">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,296.2437)" stroke="none" text-anchor="end">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,359.3750)" stroke="none" text-anchor="end">0.0</text></g><g stroke-linecap="square"><path d="M 40.6250,359.3750 h 312.5000 M 40.6250,46.8750 h 312.5000 "/></g><g stroke-width="0.4"><path d="M 48.9110,46.8750 v -2.3438 M 58.7753,46.8750 v -2.3438 M 68.6395,46.8750 v -2.3438 M 88.3681,46.8750 v -2.3438 M 98.2323,46.8750 v -2.3438 M 108.0966,46.8750 v -2.3438 M 117.9609,46.8750 v -2.3438 M 127.8251,46.8750 v -2.3438 M 147.5537,46.8750 v -2.3438 M 157.4179,46.8750 v -2.3438 M 167.2822,46.8750 v -2.3438 M 177.1465,46.8750 v -2.3438 M 187.0107,46.8750 v -2.3438 M 206.7393,46.8750 v -2.3438 M 216.6035,46.8750 v -2.3438 M 226.4678,46.8750 v -2.3438 M 236.3321,46.8750 v -2.3438 M 246.1963,46.8750 v -2.3438 M 265.9249,46.8750 v -2.3438 M 275.7891,46.8750 v -2.3438 M 285.6534,46.8750 v -2.3438 M 295.5177,46.8750 v -2.3438 M 305.3819,46.8750 v -2.3438 M 325.1105,46.8750 v -2.3438 M 334.9747,46.8750 v -2.3438 M 344.8390,46.8750 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 78.5038,46.8750 v -3.9062 M 137.6894,46.8750 v -3.9062 M 196.8750,46.8750 v -3.9062 M 256.0606,46.8750 v -3.9062 M 315.2462,46.8750 v -3.9062 "/></g><g stroke-width="0.4"><path d="M 48.9110,361.7188 v -2.3438 M 58.7753,361.7188 v -2.3438 M 68.6395,361.7188 v -2.3438 M 88.3681,361.7188 v -2.3438 M 98.2323,361.7188 v -2.3438 M 108.0966,361.7188 v -2.3438 M 117.9609,361.7188 v -2.3438 M 127.8251,361.7188 v -2.3438 M 147.5537,361.7188 v -2.3438 M 157.4179,361.7188 v -2.3438 M 167.2822,361.7188 v -2.3438 M 177.1465,361.7188 v -2.3438 M 187.0107,361.7188 v -2.3438 M 206.7393,361.7188 v -2.3438 M 216.6035,361.7188 v -2.3438 M 226.4678,361.7188 v -2.3438 M 236.3321,361.7188 v -2.3438 M 246.1963,361.7188 v -2.3438 M 265.9249,361.7188 v -2.3438 M 275.7891,361.7188 v -2.3438 M 285.6534,361.7188 v -2.3438 M 295.5177,361.7188 v -2.3438 M 305.3819,361.7188 v -2.3438 M 325.1105,361.7188 v -2.3438 M 334.9747,361.7188 v -2.3438 M 344.8390,361.7188 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 78.5038,363.2812 v -3.9062 M 137.6894,363.2812 v -3.9062 M 196.8750,363.2812 v -3.9062 M 256.0606,363.2812 v -3.9062 M 315.2462,363.2812 v -3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,315.2462,368.7500)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,256.0606,368.7500)" stroke="none" text-anchor="middle">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,196.8750,368.7500)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,137.6894,368.7500)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,78.5038,368.7500)" stroke="none" text-anchor="middle">1.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 303.4091,359.3750 h 23.6742 v -96.8013 h -23.6742 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 244.2235,359.3750 h 23.6742 v -151.5152 h -23.6742 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 185.0379,359.3750 h 23.6742 v -145.2020 h -23.6742 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 125.8523,359.3750 h 23.6742 v -63.1313 h -23.6742 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 66.6667,359.3750 h 23.6742 v -284.0909 h -23.6742 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,196.8750,31.2500)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,268.7577 h 301.8868 M 39.2453,190.3455 h 301.8868 M 39.2453,111.9333 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,268.7577 h 3.7736 M 341.1321,190.3455 h 3.7736 M 341.1321,111.9333 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,268.7577 h 3.7736 M 35.4717,190.3455 h 3.7736 M 35.4717,111.9333 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,111.9333)" stroke="none" text-anchor="end">6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,190.3455)" stroke="none" text-anchor="end">4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,268.7577)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 77.2071,45.2830 v -3.7736 M 152.5282,45.2830 v -3.7736 M 227.8492,45.2830 v -3.7736 M 303.1703,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 77.2071,350.9434 v -3.7736 M 152.5282,350.9434 v -3.7736 M 227.8492,350.9434 v -3.7736 M 303.1703,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,303.1703,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,227.8492,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,152.5282,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,77.2071,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 305.4299,347.1698 h 10.5449 v -39.2061 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 230.1088,347.1698 h 10.5449 v -274.4425 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 154.7878,347.1698 h 10.5449 v -156.8243 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 79.4667,347.1698 h 10.5449 v -196.0304 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 290.3657,347.1698 h 10.5449 v -78.4122 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 215.0446,347.1698 h 10.5449 v -78.4122 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 139.7236,347.1698 h 10.5449 v -196.0304 h -10.5449 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 64.4025,347.1698 h 10.5449 v -274.4425 h -10.5449 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_groupedBarsExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,268.7577 h 301.8868 M 39.2453,190.3455 h 301.8868 M 39.2453,111.9333 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,268.7577 h 3.7736 M 341.1321,190.3455 h 3.7736 M 341.1321,111.9333 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,268.7577 h 3.7736 M 35.4717,190.3455 h 3.7736 M 35.4717,111.9333 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,111.9333)" stroke="none" text-anchor="end">6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,190.3455)" stroke="none" text-anchor="end">4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,268.7577)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 79.2009,45.2830 v -3.7736 M 153.1927,45.2830 v -3.7736 M 227.1846,45.2830 v -3.7736 M 301.1765,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 79.2009,350.9434 v -3.7736 M 153.1927,350.9434 v -3.7736 M 227.1846,350.9434 v -3.7736 M 301.1765,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,301.1765,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,227.1846,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,153.1927,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,79.2009,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 301.1765,347.1698 h 14.7984 v -39.2061 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 227.1846,347.1698 h 14.7984 v -274.4425 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 153.1927,347.1698 h 14.7984 v -156.8243 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 79.2009,347.1698 h 14.7984 v -196.0304 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 286.3781,347.1698 h 14.7984 v -78.4122 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 212.3862,347.1698 h 14.7984 v -78.4122 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 138.3944,347.1698 h 14.7984 v -196.0304 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 64.4025,347.1698 h 14.7984 v -274.4425 h -14.7984 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_multiBarExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,268.7577 h 301.8868 M 39.2453,190.3455 h 301.8868 M 39.2453,111.9333 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,268.7577 h 3.7736 M 341.1321,190.3455 h 3.7736 M 341.1321,111.9333 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,268.7577 h 3.7736 M 35.4717,190.3455 h 3.7736 M 35.4717,111.9333 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,111.9333)" stroke="none" text-anchor="end">6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,190.3455)" stroke="none" text-anchor="end">4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,268.7577)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 79.2009,45.2830 v -3.7736 M 153.1927,45.2830 v -3.7736 M 227.1846,45.2830 v -3.7736 M 301.1765,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 79.2009,350.9434 v -3.7736 M 153.1927,350.9434 v -3.7736 M 227.1846,350.9434 v -3.7736 M 301.1765,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,301.1765,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,227.1846,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,153.1927,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,79.2009,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 301.1765,347.1698 h 14.7984 v -39.2061 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 227.1846,347.1698 h 14.7984 v -274.4425 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 153.1927,347.1698 h 14.7984 v -156.8243 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 79.2009,347.1698 h 14.7984 v -196.0304 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 286.3781,347.1698 h 14.7984 v -78.4122 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 212.3862,347.1698 h 14.7984 v -78.4122 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 138.3944,347.1698 h 14.7984 v -196.0304 h -14.7984 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 64.4025,347.1698 h 14.7984 v -274.4425 h -14.7984 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_namedBarExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 388 400" font-size="1" width="388.2812" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-linecap="square"><path d="M 40.6250,359.3750 v -312.5000 M 353.1250,359.3750 v -312.5000 "/></g><g stroke-width="0.4"><path d="M 353.1250,305.9211 h 3.9062 M 353.1250,237.3904 h 3.9062 M 353.1250,168.8596 h 3.9062 M 353.1250,100.3289 h 3.9062 "/></g><g stroke-width="0.4"><path d="M 36.7188,305.9211 h 3.9062 M 36.7188,237.3904 h 3.9062 M 36.7188,168.8596 h 3.9062 M 36.7188,100.3289 h 3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,100.3289)" stroke="none" text-anchor="end">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,168.8596)" stroke="none" text-anchor="end">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,237.3904)" stroke="none" text-anchor="end">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,305.9211)" stroke="none" text-anchor="end">eggs</text></g><g stroke-linecap="square"><path d="M 40.6250,359.3750 h 312.5000 M 40.6250,46.8750 h 312.5000 "/></g><g stroke-width="0.4"><path d="M 50.4893,46.8750 v -2.3438 M 60.3535,46.8750 v -2.3438 M 70.2178,46.8750 v -2.3438 M 80.0821,46.8750 v -2.3438 M 89.9463,46.8750 v -2.3438 M 109.6749,46.8750 v -2.3438 M 119.5391,46.8750 v -2.3438 M 129.4034,46.8750 v -2.3438 M 139.2677,46.8750 v -2.3438 M 149.1319,46.8750 v -2.3438 M 168.8605,46.8750 v -2.3438 M 178.7247,46.8750 v -2.3438 M 188.5890,46.8750 v -2.3438 M 198.4533,46.8750 v -2.3438 M 208.3176,46.8750 v -2.3438 M 228.0461,46.8750 v -2.3438 M 237.9104,46.8750 v -2.3438 M 247.7746,46.8750 v -2.3438 M 257.6389,46.8750 v -2.3438 M 267.5032,46.8750 v -2.3438 M 287.2317,46.8750 v -2.3438 M 297.0960,46.8750 v -2.3438 M 306.9602,46.8750 v -2.3438 M 316.8245,46.8750 v -2.3438 M 326.6888,46.8750 v -2.3438 M 346.4173,46.8750 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 40.6250,46.8750 v -3.9062 M 99.8106,46.8750 v -3.9062 M 158.9962,46.8750 v -3.9062 M 218.1818,46.8750 v -3.9062 M 277.3674,46.8750 v -3.9062 M 336.5530,46.8750 v -3.9062 "/></g><g stroke-width="0.4"><path d="M 50.4893,361.7188 v -2.3438 M 60.3535,361.7188 v -2.3438 M 70.2178,361.7188 v -2.3438 M 80.0821,361.7188 v -2.3438 M 89.9463,361.7188 v -2.3438 M 109.6749,361.7188 v -2.3438 M 119.5391,361.7188 v -2.3438 M 129.4034,361.7188 v -2.3438 M 139.2677,361.7188 v -2.3438 M 149.1319,361.7188 v -2.3438 M 168.8605,361.7188 v -2.3438 M 178.7247,361.7188 v -2.3438 M 188.5890,361.7188 v -2.3438 M 198.4533,361.7188 v -2.3438 M 208.3176,361.7188 v -2.3438 M 228.0461,361.7188 v -2.3438 M 237.9104,361.7188 v -2.3438 M 247.7746,361.7188 v -2.3438 M 257.6389,361.7188 v -2.3438 M 267.5032,361.7188 v -2.3438 M 287.2317,361.7188 v -2.3438 M 297.0960,361.7188 v -2.3438 M 306.9602,361.7188 v -2.3438 M 316.8245,361.7188 v -2.3438 M 326.6888,361.7188 v -2.3438 M 346.4173,361.7188 v -2.3438 "/></g><g stroke-width="0.4"><path d="M 40.6250,363.2812 v -3.9062 M 99.8106,363.2812 v -3.9062 M 158.9962,363.2812 v -3.9062 M 218.1818,363.2812 v -3.9062 M 277.3674,363.2812 v -3.9062 M 336.5530,363.2812 v -3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,336.5530,368.7500)" stroke="none" text-anchor="middle">12.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,277.3674,368.7500)" stroke="none" text-anchor="middle">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,218.1818,368.7500)" stroke="none" text-anchor="middle">7.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,158.9962,368.7500)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,99.8106,368.7500)" stroke="none" text-anchor="middle">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,40.6250,368.7500)" stroke="none" text-anchor="middle">0.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 40.6250,127.7412 v -54.8246 h 71.0227 v 54.8246 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 40.6250,196.2719 v -54.8246 h 213.0682 v 54.8246 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 40.6250,264.8026 v -54.8246 h 118.3712 v 54.8246 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 40.6250,333.3333 v -54.8246 h 284.0909 v 54.8246 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,196.8750,31.2500)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Bar_namedBarExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 388 400" font-size="1" width="388.2812" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 40.6250,359.3750 h 312.5000 M 40.6250,300.1894 h 312.5000 M 40.6250,241.0038 h 312.5000 M 40.6250,181.8182 h 312.5000 M 40.6250,122.6326 h 312.5000 M 40.6250,63.4470 h 312.5000 "/></g><g stroke-linecap="square"><path d="M 40.6250,359.3750 v -312.5000 M 353.1250,359.3750 v -312.5000 "/></g><g stroke-width="0.4"><path d="M 353.1250,349.5107 h 2.3438 M 353.1250,339.6465 h 2.3438 M 353.1250,329.7822 h 2.3438 M 353.1250,319.9179 h 2.3438 M 353.1250,310.0537 h 2.3438 M 353.1250,290.3251 h 2.3438 M 353.1250,280.4609 h 2.3438 M 353.1250,270.5966 h 2.3438 M 353.1250,260.7323 h 2.3438 M 353.1250,250.8681 h 2.3438 M 353.1250,231.1395 h 2.3438 M 353.1250,221.2753 h 2.3438 M 353.1250,211.4110 h 2.3438 M 353.1250,201.5467 h 2.3438 M 353.1250,191.6824 h 2.3438 M 353.1250,171.9539 h 2.3438 M 353.1250,162.0896 h 2.3438 M 353.1250,152.2254 h 2.3438 M 353.1250,142.3611 h 2.3438 M 353.1250,132.4968 h 2.3438 M 353.1250,112.7683 h 2.3438 M 353.1250,102.9040 h 2.3438 M 353.1250,93.0398 h 2.3438 M 353.1250,83.1755 h 2.3438 M 353.1250,73.3112 h 2.3438 M 353.1250,53.5827 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 353.1250,359.3750 h 3.9062 M 353.1250,300.1894 h 3.9062 M 353.1250,241.0038 h 3.9062 M 353.1250,181.8182 h 3.9062 M 353.1250,122.6326 h 3.9062 M 353.1250,63.4470 h 3.9062 "/></g><g stroke-width="0.4"><path d="M 38.2813,349.5107 h 2.3438 M 38.2813,339.6465 h 2.3438 M 38.2813,329.7822 h 2.3438 M 38.2813,319.9179 h 2.3438 M 38.2813,310.0537 h 2.3438 M 38.2813,290.3251 h 2.3438 M 38.2813,280.4609 h 2.3438 M 38.2813,270.5966 h 2.3438 M 38.2813,260.7323 h 2.3438 M 38.2813,250.8681 h 2.3438 M 38.2813,231.1395 h 2.3438 M 38.2813,221.2753 h 2.3438 M 38.2813,211.4110 h 2.3438 M 38.2813,201.5467 h 2.3438 M 38.2813,191.6824 h 2.3438 M 38.2813,171.9539 h 2.3438 M 38.2813,162.0896 h 2.3438 M 38.2813,152.2254 h 2.3438 M 38.2813,142.3611 h 2.3438 M 38.2813,132.4968 h 2.3438 M 38.2813,112.7683 h 2.3438 M 38.2813,102.9040 h 2.3438 M 38.2813,93.0398 h 2.3438 M 38.2813,83.1755 h 2.3438 M 38.2813,73.3112 h 2.3438 M 38.2813,53.5827 h 2.3438 "/></g><g stroke-width="0.4"><path d="M 36.7188,359.3750 h 3.9062 M 36.7188,300.1894 h 3.9062 M 36.7188,241.0038 h 3.9062 M 36.7188,181.8182 h 3.9062 M 36.7188,122.6326 h 3.9062 M 36.7188,63.4470 h 3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,63.4470)" stroke="none" text-anchor="end">12.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,122.6326)" stroke="none" text-anchor="end">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,181.8182)" stroke="none" text-anchor="end">7.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,241.0038)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,300.1894)" stroke="none" text-anchor="end">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,31.2500,359.3750)" stroke="none" text-anchor="end">0.0</text></g><g stroke-linecap="square"><path d="M 40.6250,359.3750 h 312.5000 M 40.6250,46.8750 h 312.5000 "/></g><g stroke-width="0.4"><path d="M 81.9853,46.8750 v -3.9062 M 158.5784,46.8750 v -3.9062 M 235.1716,46.8750 v -3.9062 M 311.7647,46.8750 v -3.9062 "/></g><g stroke-width="0.4"><path d="M 81.9853,363.2812 v -3.9062 M 158.5784,363.2812 v -3.9062 M 235.1716,363.2812 v -3.9062 M 311.7647,363.2812 v -3.9062 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,311.7647,368.7500)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,235.1716,368.7500)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,158.5784,368.7500)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,81.9853,368.7500)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 296.4461,359.3750 h 30.6373 v -71.0227 h -30.6373 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 219.8529,359.3750 h 30.6373 v -213.0682 h -30.6373 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 143.2598,359.3750 h 30.6373 v -118.3712 h -30.6373 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 353.1250,359.3750 l -0.0000,-312.5000 h -312.5000 l -0.0000,312.5000 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 66.6667,359.3750 h 30.6373 v -284.0909 h -30.6373 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,196.8750,31.2500)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Bar_runningBarsExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,268.7577 h 301.8868 M 39.2453,190.3455 h 301.8868 M 39.2453,111.9333 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,268.7577 h 3.7736 M 341.1321,190.3455 h 3.7736 M 341.1321,111.9333 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,268.7577 h 3.7736 M 35.4717,190.3455 h 3.7736 M 35.4717,111.9333 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,111.9333)" stroke="none" text-anchor="end">6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,190.3455)" stroke="none" text-anchor="end">4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,268.7577)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 71.2018,45.2830 v -3.7736 M 105.1980,45.2830 v -3.7736 M 139.1943,45.2830 v -3.7736 M 173.1905,45.2830 v -3.7736 M 207.1868,45.2830 v -3.7736 M 241.1831,45.2830 v -3.7736 M 275.1793,45.2830 v -3.7736 M 309.1756,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 71.2018,350.9434 v -3.7736 M 105.1980,350.9434 v -3.7736 M 139.1943,350.9434 v -3.7736 M 173.1905,350.9434 v -3.7736 M 207.1868,350.9434 v -3.7736 M 241.1831,350.9434 v -3.7736 M 275.1793,350.9434 v -3.7736 M 309.1756,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,309.1756,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,275.1793,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,241.1831,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,207.1868,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,173.1905,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,139.1943,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,105.1980,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,71.2018,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 166.3913,347.1698 h 13.5985 v -39.2061 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 132.3950,347.1698 h 13.5985 v -274.4425 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 98.3988,347.1698 h 13.5985 v -156.8243 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 64.4025,347.1698 h 13.5985 v -196.0304 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 302.3763,347.1698 h 13.5985 v -78.4122 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 268.3801,347.1698 h 13.5985 v -78.4122 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 234.3838,347.1698 h 13.5985 v -196.0304 h -13.5985 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 200.3876,347.1698 h 13.5985 v -274.4425 h -13.5985 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_stackedBarsExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,289.9943 h 301.8868 M 39.2453,232.8188 h 301.8868 M 39.2453,175.6432 h 301.8868 M 39.2453,118.4677 h 301.8868 M 39.2453,61.2922 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,289.9943 h 3.7736 M 341.1321,232.8188 h 3.7736 M 341.1321,175.6432 h 3.7736 M 341.1321,118.4677 h 3.7736 M 341.1321,61.2922 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,289.9943 h 3.7736 M 35.4717,232.8188 h 3.7736 M 35.4717,175.6432 h 3.7736 M 35.4717,118.4677 h 3.7736 M 35.4717,61.2922 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,61.2922)" stroke="none" text-anchor="end">12</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,118.4677)" stroke="none" text-anchor="end">10</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,175.6432)" stroke="none" text-anchor="end">8</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,232.8188)" stroke="none" text-anchor="end">5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,289.9943)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 79.2009,45.2830 v -3.7736 M 153.1927,45.2830 v -3.7736 M 227.1846,45.2830 v -3.7736 M 301.1765,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 79.2009,350.9434 v -3.7736 M 153.1927,350.9434 v -3.7736 M 227.1846,350.9434 v -3.7736 M 301.1765,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,301.1765,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,227.1846,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,153.1927,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,79.2009,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 286.3781,347.1698 h 29.5967 v -22.8702 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 212.3862,347.1698 h 29.5967 v -160.0915 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 138.3944,347.1698 h 29.5967 v -91.4808 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 64.4025,347.1698 h 29.5967 v -114.3511 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 286.3781,324.2996 h 29.5967 v -45.7404 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 212.3862,187.0783 h 29.5967 v -45.7404 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 138.3944,255.6890 h 29.5967 v -114.3511 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 64.4025,232.8188 h 29.5967 v -160.0915 h -29.5967 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="400.0000" stroke-opacity="1" viewBox="0 0 454 400" font-size="1" width="454.3396" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,292.2813 h 301.8868 M 39.2453,237.3928 h 301.8868 M 39.2453,182.5043 h 301.8868 M 39.2453,127.6158 h 301.8868 M 39.2453,72.7273 h 301.8868 "/></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 v -301.8868 M 341.1321,347.1698 v -301.8868 "/></g><g stroke-width="0.4"><path d="M 341.1321,347.1698 h 3.7736 M 341.1321,292.2813 h 3.7736 M 341.1321,237.3928 h 3.7736 M 341.1321,182.5043 h 3.7736 M 341.1321,127.6158 h 3.7736 M 341.1321,72.7273 h 3.7736 "/></g><g stroke-width="0.4"><path d="M 35.4717,347.1698 h 3.7736 M 35.4717,292.2813 h 3.7736 M 35.4717,237.3928 h 3.7736 M 35.4717,182.5043 h 3.7736 M 35.4717,127.6158 h 3.7736 M 35.4717,72.7273 h 3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,72.7273)" stroke="none" text-anchor="end">10</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,127.6158)" stroke="none" text-anchor="end">8</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,182.5043)" stroke="none" text-anchor="end">6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,237.3928)" stroke="none" text-anchor="end">4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,292.2813)" stroke="none" text-anchor="end">2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,30.1887,347.1698)" stroke="none" text-anchor="end">0</text></g><g stroke-linecap="square"><path d="M 39.2453,347.1698 h 301.8868 M 39.2453,45.2830 h 301.8868 "/></g><g stroke-width="0.4"><path d="M 79.2009,45.2830 v -3.7736 M 153.1927,45.2830 v -3.7736 M 227.1846,45.2830 v -3.7736 M 301.1765,45.2830 v -3.7736 "/></g><g stroke-width="0.4"><path d="M 79.2009,350.9434 v -3.7736 M 153.1927,350.9434 v -3.7736 M 227.1846,350.9434 v -3.7736 M 301.1765,350.9434 v -3.7736 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,369.8113)" stroke="none" text-anchor="middle">breakfast item</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,301.1765,356.2264)" stroke="none" text-anchor="middle">beans</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,227.1846,356.2264)" stroke="none" text-anchor="middle">sausage</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,153.1927,356.2264)" stroke="none" text-anchor="middle">bacon</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,79.2009,356.2264)" stroke="none" text-anchor="middle">eggs</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip1"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 286.3781,347.1698 h 29.5967 v -91.4808 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip2"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 212.3862,347.1698 h 29.5967 v -213.4553 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 138.3944,347.1698 h 29.5967 v -121.9745 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip4"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 64.4025,347.1698 h 29.5967 v -114.3511 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 286.3781,255.6890 h 29.5967 v -182.9617 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 212.3862,133.7145 h 29.5967 v -60.9872 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 138.3944,225.1953 h 29.5967 v -152.4681 h -29.5967 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 341.1321,347.1698 l -0.0000,-301.8868 h -301.8868 l -0.0000,301.8868 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 64.4025,232.8188 h 29.5967 v -160.0915 h -29.5967 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,190.1887,30.1887)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 420.3774,75.4717 l -0.0000,-30.1887 h -64.1509 l -0.0000,30.1887 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,67.9245)" stroke="none" text-anchor="start">boys</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 371.6981,71.6981 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="0.6037735849056605" fill="rgb(103,146,193)"><path d="M 366.4151,71.6981 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,378.8679,52.8302)" stroke="none" text-anchor="start">girls</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 371.6981,56.6038 l -0.0000,-7.5472 h -3.0189 l -0.0000,7.5472 Z"/></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="0.6037735849056605" fill="rgb(231,93,93)"><path d="M 366.4151,56.6038 l -0.0000,-5.2830 h -3.0189 l -0.0000,5.2830 Z"/></g></svg>
+ diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 372 350" font-size="1" width="371.8750" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,246.0938 h 273.4375 M 35.5469,177.7344 h 273.4375 M 35.5469,109.3750 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,303.0599 h 2.0508 M 308.9844,291.6667 h 2.0508 M 308.9844,280.2734 h 2.0508 M 308.9844,268.8802 h 2.0508 M 308.9844,257.4870 h 2.0508 M 308.9844,234.7005 h 2.0508 M 308.9844,223.3073 h 2.0508 M 308.9844,211.9141 h 2.0508 M 308.9844,200.5208 h 2.0508 M 308.9844,189.1276 h 2.0508 M 308.9844,166.3411 h 2.0508 M 308.9844,154.9479 h 2.0508 M 308.9844,143.5547 h 2.0508 M 308.9844,132.1615 h 2.0508 M 308.9844,120.7682 h 2.0508 M 308.9844,97.9818 h 2.0508 M 308.9844,86.5885 h 2.0508 M 308.9844,75.1953 h 2.0508 M 308.9844,63.8021 h 2.0508 M 308.9844,52.4089 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,246.0938 h 3.4180 M 308.9844,177.7344 h 3.4180 M 308.9844,109.3750 h 3.4180 M 308.9844,41.0156 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,303.0599 h 2.0508 M 33.4961,291.6667 h 2.0508 M 33.4961,280.2734 h 2.0508 M 33.4961,268.8802 h 2.0508 M 33.4961,257.4870 h 2.0508 M 33.4961,234.7005 h 2.0508 M 33.4961,223.3073 h 2.0508 M 33.4961,211.9141 h 2.0508 M 33.4961,200.5208 h 2.0508 M 33.4961,189.1276 h 2.0508 M 33.4961,166.3411 h 2.0508 M 33.4961,154.9479 h 2.0508 M 33.4961,143.5547 h 2.0508 M 33.4961,132.1615 h 2.0508 M 33.4961,120.7682 h 2.0508 M 33.4961,97.9818 h 2.0508 M 33.4961,86.5885 h 2.0508 M 33.4961,75.1953 h 2.0508 M 33.4961,63.8021 h 2.0508 M 33.4961,52.4089 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,246.0938 h 3.4180 M 32.1289,177.7344 h 3.4180 M 32.1289,109.3750 h 3.4180 M 32.1289,41.0156 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,41.0156)" stroke="none" text-anchor="end">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,109.3750)" stroke="none" text-anchor="end">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,177.7344)" stroke="none" text-anchor="end">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,246.0938)" stroke="none" text-anchor="end">0.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 35.5469,314.4531 v -273.4375 M 81.1198,314.4531 v -273.4375 M 126.6927,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 217.8385,314.4531 v -273.4375 M 263.4115,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 50.7378,41.0156 v -2.0508 M 58.3333,41.0156 v -2.0508 M 65.9288,41.0156 v -2.0508 M 73.5243,41.0156 v -2.0508 M 88.7153,41.0156 v -2.0508 M 96.3108,41.0156 v -2.0508 M 103.9063,41.0156 v -2.0508 M 111.5017,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 134.2882,41.0156 v -2.0508 M 141.8837,41.0156 v -2.0508 M 149.4792,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 164.6701,41.0156 v -2.0508 M 179.8611,41.0156 v -2.0508 M 187.4566,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 202.6476,41.0156 v -2.0508 M 210.2431,41.0156 v -2.0508 M 225.4340,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 240.6250,41.0156 v -2.0508 M 248.2205,41.0156 v -2.0508 M 255.8160,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 278.6024,41.0156 v -2.0508 M 286.1979,41.0156 v -2.0508 M 293.7934,41.0156 v -2.0508 M 301.3889,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,41.0156 v -3.4180 M 81.1198,41.0156 v -3.4180 M 126.6927,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 217.8385,41.0156 v -3.4180 M 263.4115,41.0156 v -3.4180 M 308.9844,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 50.7378,316.5039 v -2.0508 M 58.3333,316.5039 v -2.0508 M 65.9288,316.5039 v -2.0508 M 73.5243,316.5039 v -2.0508 M 88.7153,316.5039 v -2.0508 M 96.3108,316.5039 v -2.0508 M 103.9063,316.5039 v -2.0508 M 111.5017,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 134.2882,316.5039 v -2.0508 M 141.8837,316.5039 v -2.0508 M 149.4792,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 164.6701,316.5039 v -2.0508 M 179.8611,316.5039 v -2.0508 M 187.4566,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 202.6476,316.5039 v -2.0508 M 210.2431,316.5039 v -2.0508 M 225.4340,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 240.6250,316.5039 v -2.0508 M 248.2205,316.5039 v -2.0508 M 255.8160,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 278.6024,316.5039 v -2.0508 M 286.1979,316.5039 v -2.0508 M 293.7934,316.5039 v -2.0508 M 301.3889,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,317.8711 v -3.4180 M 81.1198,317.8711 v -3.4180 M 126.6927,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 217.8385,317.8711 v -3.4180 M 263.4115,317.8711 v -3.4180 M 308.9844,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,308.9844,322.6562)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,263.4115,322.6562)" stroke="none" text-anchor="middle">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,217.8385,322.6562)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,126.6927,322.6562)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,81.1198,322.6562)" stroke="none" text-anchor="middle">0.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,35.5469,322.6562)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(252,253,191)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 308.9844,246.0938 l -0.0000,-205.0781 h -136.7188 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(254,159,109)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 217.8385,246.0938 l -0.0000,-205.0781 h -136.7188 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(222,73,104)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 126.6927,246.0938 l -0.0000,-205.0781 h -91.1458 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(140,41,129)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 308.9844,314.4531 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,15,112)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 217.8385,314.4531 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(0,0,4)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 126.6927,314.4531 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,41.0156)" stroke="none" text-anchor="start">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,95.7031)" stroke="none" text-anchor="start">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,150.3906)" stroke="none" text-anchor="start">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,205.0781)" stroke="none" text-anchor="start">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,259.7656)" stroke="none" text-anchor="start">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,314.4531)" stroke="none" text-anchor="start">1.0</text></g><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(-0.0000,-273.4375,-13.6719,-0.0000,329.4922,177.7344)" id="gradient72" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(0,0,4)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(1,0,5)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(1,1,6)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(1,1,8)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(2,1,9)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(2,2,11)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(2,2,13)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(3,3,15)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(3,3,18)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(4,4,20)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(5,4,22)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(6,5,24)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(6,5,26)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(7,6,28)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(8,7,30)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(9,7,32)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(10,8,34)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(11,9,36)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(12,9,38)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(13,10,41)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(14,11,43)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(16,11,45)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(17,12,47)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(18,13,49)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(19,13,52)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(20,14,54)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(21,14,56)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(22,15,59)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(24,15,61)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(25,16,63)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(26,16,66)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(28,16,68)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(29,17,71)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(30,17,73)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(32,17,75)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(33,17,78)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(34,17,80)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(36,18,83)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(37,18,85)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(39,18,88)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(41,17,90)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(42,17,92)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(44,17,95)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(45,17,97)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(47,17,99)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(49,17,101)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(51,16,103)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(52,16,105)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(54,16,107)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(56,16,108)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(57,15,110)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(59,15,112)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(61,15,113)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(63,15,114)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(64,15,116)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(66,15,117)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(68,15,118)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(69,16,119)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(71,16,120)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(73,16,120)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(74,16,121)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(76,17,122)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(78,17,123)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(79,18,123)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(81,18,124)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(82,19,124)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(84,19,125)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(86,20,125)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(87,21,126)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(89,21,126)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(90,22,126)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(92,22,127)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(93,23,127)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(95,24,127)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(96,24,128)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(98,25,128)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(100,26,128)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(101,26,128)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(103,27,128)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(104,28,129)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(106,28,129)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(107,29,129)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(109,29,129)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(110,30,129)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(112,31,129)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(114,31,129)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(115,32,129)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(117,33,129)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(118,33,129)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(120,34,129)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(121,34,130)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(123,35,130)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(124,35,130)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(126,36,130)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(128,37,130)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(129,37,129)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(131,38,129)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(132,38,129)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(134,39,129)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(136,39,129)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(137,40,129)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(139,41,129)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(140,41,129)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(142,42,129)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(144,42,129)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(145,43,129)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(147,43,128)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(148,44,128)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(150,44,128)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(152,45,128)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(153,45,128)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(155,46,127)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(156,46,127)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(158,47,127)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(160,47,127)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(161,48,126)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(163,48,126)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(165,49,126)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(166,49,125)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(168,50,125)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(170,51,125)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(171,51,124)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(173,52,124)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(174,52,123)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(176,53,123)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(178,53,123)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(179,54,122)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(181,54,122)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(183,55,121)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(184,55,121)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(186,56,120)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(188,57,120)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(189,57,119)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(191,58,119)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(192,58,118)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(194,59,117)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(196,60,117)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(197,60,116)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(199,61,115)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(200,62,115)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(202,62,114)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(204,63,113)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(205,64,113)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(207,64,112)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(208,65,111)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(210,66,111)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(211,67,110)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(213,68,109)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(214,69,108)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(216,69,108)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(217,70,107)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(219,71,106)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(220,72,105)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(222,73,104)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(223,74,104)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(224,76,103)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(226,77,102)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(227,78,101)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(228,79,100)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(229,80,100)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(231,82,99)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(232,83,98)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(233,84,98)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(234,86,97)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(235,87,96)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(236,88,96)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(237,90,95)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(238,91,94)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(239,93,94)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(240,95,94)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(241,96,93)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(242,98,93)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(242,100,92)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(243,101,92)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(244,103,92)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(244,105,92)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(245,107,92)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(246,108,92)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(246,110,92)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(247,112,92)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(247,114,92)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(248,116,92)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(248,118,92)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(249,120,93)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(249,121,93)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(249,123,93)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(250,125,94)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(250,127,94)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(250,129,95)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(251,131,95)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(251,133,96)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(251,135,97)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(252,137,97)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(252,138,98)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(252,140,99)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(252,142,100)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(252,144,101)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(253,146,102)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(253,148,103)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(253,150,104)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(253,152,105)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(253,154,106)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(253,155,107)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(254,157,108)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(254,159,109)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(254,161,110)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(254,163,111)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(254,165,113)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(254,167,114)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(254,169,115)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(254,170,116)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(254,172,118)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(254,174,119)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(254,176,120)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(254,178,122)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(254,180,123)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(254,182,124)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(254,183,126)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(254,185,127)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(254,187,129)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(254,189,130)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(254,191,132)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(254,193,133)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(254,194,135)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(254,196,136)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(254,198,138)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(254,200,140)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(254,202,141)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(254,204,143)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(254,205,144)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(254,207,146)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(254,209,148)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(254,211,149)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(254,213,151)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(254,215,153)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(254,216,154)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(253,218,156)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(253,220,158)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(253,222,160)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(253,224,161)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(253,226,163)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(253,227,165)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(253,229,167)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(253,231,169)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(253,233,170)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(253,235,172)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(252,236,174)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(252,238,176)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(252,240,178)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(252,242,180)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(252,244,182)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(252,246,184)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(252,247,185)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(252,249,187)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(252,251,189)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(252,253,191)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient72)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g stroke-width="0.8"><path d="M 336.3281,314.4531 h -13.6719 M 336.3281,259.7656 h -13.6719 M 336.3281,205.0781 h -13.6719 M 336.3281,150.3906 h -13.6719 M 336.3281,95.7031 h -13.6719 M 336.3281,41.0156 h -13.6719 "/></g><g><path d="M 339.7461,41.0156 h -6.8359 "/></g><g><path d="M 339.7461,95.7031 h -6.8359 "/></g><g><path d="M 339.7461,150.3906 h -6.8359 "/></g><g><path d="M 339.7461,205.0781 h -6.8359 "/></g><g><path d="M 339.7461,259.7656 h -6.8359 "/></g><g><path d="M 339.7461,314.4531 h -6.8359 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_HeatMap_heatMapExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 372 350" font-size="1" width="371.8750" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,246.0938 h 273.4375 M 35.5469,177.7344 h 273.4375 M 35.5469,109.3750 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,303.0599 h 2.0508 M 308.9844,291.6667 h 2.0508 M 308.9844,280.2734 h 2.0508 M 308.9844,268.8802 h 2.0508 M 308.9844,257.4870 h 2.0508 M 308.9844,234.7005 h 2.0508 M 308.9844,223.3073 h 2.0508 M 308.9844,211.9141 h 2.0508 M 308.9844,200.5208 h 2.0508 M 308.9844,189.1276 h 2.0508 M 308.9844,166.3411 h 2.0508 M 308.9844,154.9479 h 2.0508 M 308.9844,143.5547 h 2.0508 M 308.9844,132.1615 h 2.0508 M 308.9844,120.7682 h 2.0508 M 308.9844,97.9818 h 2.0508 M 308.9844,86.5885 h 2.0508 M 308.9844,75.1953 h 2.0508 M 308.9844,63.8021 h 2.0508 M 308.9844,52.4089 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,246.0938 h 3.4180 M 308.9844,177.7344 h 3.4180 M 308.9844,109.3750 h 3.4180 M 308.9844,41.0156 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,303.0599 h 2.0508 M 33.4961,291.6667 h 2.0508 M 33.4961,280.2734 h 2.0508 M 33.4961,268.8802 h 2.0508 M 33.4961,257.4870 h 2.0508 M 33.4961,234.7005 h 2.0508 M 33.4961,223.3073 h 2.0508 M 33.4961,211.9141 h 2.0508 M 33.4961,200.5208 h 2.0508 M 33.4961,189.1276 h 2.0508 M 33.4961,166.3411 h 2.0508 M 33.4961,154.9479 h 2.0508 M 33.4961,143.5547 h 2.0508 M 33.4961,132.1615 h 2.0508 M 33.4961,120.7682 h 2.0508 M 33.4961,97.9818 h 2.0508 M 33.4961,86.5885 h 2.0508 M 33.4961,75.1953 h 2.0508 M 33.4961,63.8021 h 2.0508 M 33.4961,52.4089 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,246.0938 h 3.4180 M 32.1289,177.7344 h 3.4180 M 32.1289,109.3750 h 3.4180 M 32.1289,41.0156 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,41.0156)" stroke="none" text-anchor="end">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,109.3750)" stroke="none" text-anchor="end">15.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,177.7344)" stroke="none" text-anchor="end">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,246.0938)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 35.5469,314.4531 v -273.4375 M 81.1198,314.4531 v -273.4375 M 126.6927,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 217.8385,314.4531 v -273.4375 M 263.4115,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 50.7378,41.0156 v -2.0508 M 58.3333,41.0156 v -2.0508 M 65.9288,41.0156 v -2.0508 M 73.5243,41.0156 v -2.0508 M 88.7153,41.0156 v -2.0508 M 96.3108,41.0156 v -2.0508 M 103.9062,41.0156 v -2.0508 M 111.5017,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 134.2882,41.0156 v -2.0508 M 141.8837,41.0156 v -2.0508 M 149.4792,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 164.6701,41.0156 v -2.0508 M 179.8611,41.0156 v -2.0508 M 187.4566,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 202.6476,41.0156 v -2.0508 M 210.2431,41.0156 v -2.0508 M 225.4340,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 240.6250,41.0156 v -2.0508 M 248.2205,41.0156 v -2.0508 M 255.8160,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 278.6024,41.0156 v -2.0508 M 286.1979,41.0156 v -2.0508 M 293.7934,41.0156 v -2.0508 M 301.3889,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,41.0156 v -3.4180 M 81.1198,41.0156 v -3.4180 M 126.6927,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 217.8385,41.0156 v -3.4180 M 263.4115,41.0156 v -3.4180 M 308.9844,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 50.7378,316.5039 v -2.0508 M 58.3333,316.5039 v -2.0508 M 65.9288,316.5039 v -2.0508 M 73.5243,316.5039 v -2.0508 M 88.7153,316.5039 v -2.0508 M 96.3108,316.5039 v -2.0508 M 103.9062,316.5039 v -2.0508 M 111.5017,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 134.2882,316.5039 v -2.0508 M 141.8837,316.5039 v -2.0508 M 149.4792,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 164.6701,316.5039 v -2.0508 M 179.8611,316.5039 v -2.0508 M 187.4566,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 202.6476,316.5039 v -2.0508 M 210.2431,316.5039 v -2.0508 M 225.4340,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 240.6250,316.5039 v -2.0508 M 248.2205,316.5039 v -2.0508 M 255.8160,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 278.6024,316.5039 v -2.0508 M 286.1979,316.5039 v -2.0508 M 293.7934,316.5039 v -2.0508 M 301.3889,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,317.8711 v -3.4180 M 81.1198,317.8711 v -3.4180 M 126.6927,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 217.8385,317.8711 v -3.4180 M 263.4115,317.8711 v -3.4180 M 308.9844,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,308.9844,322.6562)" stroke="none" text-anchor="middle">30.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,263.4115,322.6562)" stroke="none" text-anchor="middle">25.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,217.8385,322.6562)" stroke="none" text-anchor="middle">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">15.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,126.6927,322.6562)" stroke="none" text-anchor="middle">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,81.1198,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,35.5469,322.6562)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(253,231,37)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 308.9844,246.0938 l -0.0000,-205.0781 h -136.7188 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(122,209,81)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 217.8385,246.0938 l -0.0000,-205.0781 h -136.7188 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(34,168,132)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 126.6927,246.0938 l -0.0000,-205.0781 h -91.1458 l -0.0000,205.0781 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(42,120,142)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 308.9844,314.4531 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(65,68,135)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 217.8385,314.4531 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(68,1,84)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 126.6927,314.4531 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,41.0156)" stroke="none" text-anchor="start">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,95.7031)" stroke="none" text-anchor="start">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,150.3906)" stroke="none" text-anchor="start">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,205.0781)" stroke="none" text-anchor="start">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,259.7656)" stroke="none" text-anchor="start">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,314.4531)" stroke="none" text-anchor="start">1.0</text></g><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(-0.0000,-273.4375,-13.6719,-0.0000,329.4922,177.7344)" id="gradient72" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(68,1,84)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(68,2,86)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(69,4,87)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(69,5,89)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(70,7,90)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(70,8,92)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(70,10,93)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(70,11,94)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(71,13,96)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(71,14,97)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(71,16,99)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(71,17,100)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(71,19,101)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(72,20,103)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(72,22,104)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(72,23,105)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(72,24,106)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(72,26,108)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(72,27,109)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(72,28,110)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(72,29,111)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(72,31,112)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(72,32,113)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(72,33,115)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(72,35,116)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(72,36,117)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(72,37,118)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(72,38,119)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(72,40,120)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(72,41,121)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(71,42,122)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(71,44,122)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(71,45,123)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(71,46,124)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(71,47,125)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(70,48,126)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(70,50,126)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(70,51,127)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(70,52,128)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(69,53,129)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(69,55,129)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(69,56,130)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(68,57,131)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(68,58,131)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(68,59,132)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(67,61,132)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(67,62,133)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(66,63,133)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(66,64,134)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(66,65,134)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(65,66,135)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(65,68,135)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(64,69,136)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(64,70,136)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(63,71,136)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(63,72,137)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(62,73,137)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(62,74,137)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(62,76,138)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(61,77,138)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(61,78,138)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(60,79,138)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(60,80,139)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(59,81,139)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(59,82,139)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(58,83,139)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(58,84,140)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(57,85,140)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(57,86,140)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(56,88,140)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(56,89,140)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(55,90,140)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(55,91,141)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(54,92,141)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(54,93,141)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(53,94,141)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(53,95,141)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(52,96,141)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(52,97,141)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(51,98,141)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(51,99,141)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(50,100,142)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(50,101,142)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(49,102,142)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(49,103,142)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(49,104,142)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(48,105,142)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(48,106,142)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(47,107,142)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(47,108,142)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(46,109,142)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(46,110,142)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(46,111,142)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(45,112,142)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(45,113,142)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(44,113,142)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(44,114,142)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(44,115,142)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(43,116,142)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(43,117,142)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(42,118,142)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(42,119,142)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(42,120,142)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(41,121,142)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(41,122,142)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(41,123,142)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(40,124,142)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(40,125,142)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(39,126,142)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(39,127,142)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(39,128,142)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(38,129,142)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(37,131,142)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(37,132,142)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(37,133,142)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(36,134,142)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(36,135,142)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(35,136,142)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(35,137,142)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(35,138,141)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(34,139,141)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(34,140,141)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(34,141,141)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(33,142,141)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(33,143,141)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(33,144,141)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(33,145,140)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(32,147,140)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(31,148,140)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(31,149,139)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(31,150,139)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(31,151,139)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(31,152,139)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(31,153,138)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(31,154,138)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(30,155,138)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(30,156,137)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(30,157,137)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(31,158,137)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(31,159,136)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(31,160,136)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(31,161,136)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(31,161,135)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(31,162,135)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(32,163,134)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(32,164,134)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(33,165,133)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(33,166,133)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(34,167,133)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(34,168,132)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(35,169,131)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(36,170,131)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(37,171,130)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(37,172,130)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(38,173,129)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(39,173,129)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(40,174,128)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(41,175,127)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(42,176,127)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(44,177,126)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(45,178,125)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(46,179,124)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(47,180,124)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(49,181,123)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(50,182,122)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(52,182,121)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(53,183,121)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(55,184,120)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(56,185,119)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(58,186,118)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(59,187,117)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(61,188,116)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(63,188,115)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(64,189,114)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(66,190,113)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(68,191,112)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(70,192,111)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(72,193,110)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(74,193,109)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(76,194,108)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(78,195,107)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(80,196,106)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(82,197,105)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(84,197,104)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(86,198,103)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(88,199,101)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(90,200,100)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(92,200,99)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(94,201,98)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(96,202,96)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(99,203,95)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(101,203,94)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(103,204,92)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(105,205,91)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(108,205,90)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(110,206,88)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(112,207,87)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(115,208,86)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(117,208,84)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(119,209,83)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(122,209,81)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(124,210,80)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(127,211,78)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(129,211,77)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(132,212,75)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(134,213,73)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(137,213,72)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(139,214,70)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(142,214,69)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(144,215,67)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(147,215,65)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(149,216,64)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(152,216,62)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(155,217,60)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(157,217,59)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(160,218,57)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(162,218,55)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(165,219,54)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(168,219,52)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(170,220,50)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(173,220,48)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(176,221,47)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(178,221,45)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(181,222,43)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(184,222,41)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(186,222,40)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(189,223,38)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(192,223,37)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(194,223,35)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(197,224,33)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(200,224,32)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(202,225,31)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(205,225,29)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(208,225,28)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(210,226,27)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(213,226,26)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(216,226,25)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(218,227,25)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(221,227,24)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(223,227,24)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(226,228,24)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(229,228,25)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(231,228,25)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(234,229,26)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(236,229,27)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(239,229,28)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(241,229,29)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(244,230,30)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(246,230,32)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(248,230,33)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(251,231,35)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(253,231,37)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient72)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g stroke-width="0.8"><path d="M 336.3281,314.4531 h -13.6719 M 336.3281,259.7656 h -13.6719 M 336.3281,205.0781 h -13.6719 M 336.3281,150.3906 h -13.6719 M 336.3281,95.7031 h -13.6719 M 336.3281,41.0156 h -13.6719 "/></g><g><path d="M 339.7461,41.0156 h -6.8359 "/></g><g><path d="M 339.7461,95.7031 h -6.8359 "/></g><g><path d="M 339.7461,150.3906 h -6.8359 "/></g><g><path d="M 339.7461,205.0781 h -6.8359 "/></g><g><path d="M 339.7461,259.7656 h -6.8359 "/></g><g><path d="M 339.7461,314.4531 h -6.8359 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 372 350" font-size="1" width="371.8750" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,268.8802 h 273.4375 M 35.5469,223.3073 h 273.4375 M 35.5469,177.7344 h 273.4375 M 35.5469,132.1615 h 273.4375 M 35.5469,86.5885 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,306.8576 h 2.0508 M 308.9844,299.2622 h 2.0508 M 308.9844,291.6667 h 2.0508 M 308.9844,284.0712 h 2.0508 M 308.9844,276.4757 h 2.0508 M 308.9844,261.2847 h 2.0508 M 308.9844,253.6892 h 2.0508 M 308.9844,246.0938 h 2.0508 M 308.9844,238.4983 h 2.0508 M 308.9844,230.9028 h 2.0508 M 308.9844,215.7118 h 2.0508 M 308.9844,208.1163 h 2.0508 M 308.9844,200.5208 h 2.0508 M 308.9844,192.9253 h 2.0508 M 308.9844,185.3299 h 2.0508 M 308.9844,170.1389 h 2.0508 M 308.9844,162.5434 h 2.0508 M 308.9844,154.9479 h 2.0508 M 308.9844,147.3524 h 2.0508 M 308.9844,139.7569 h 2.0508 M 308.9844,124.5660 h 2.0508 M 308.9844,116.9705 h 2.0508 M 308.9844,109.3750 h 2.0508 M 308.9844,101.7795 h 2.0508 M 308.9844,94.1840 h 2.0508 M 308.9844,78.9931 h 2.0508 M 308.9844,71.3976 h 2.0508 M 308.9844,63.8021 h 2.0508 M 308.9844,56.2066 h 2.0508 M 308.9844,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,268.8802 h 3.4180 M 308.9844,223.3073 h 3.4180 M 308.9844,177.7344 h 3.4180 M 308.9844,132.1615 h 3.4180 M 308.9844,86.5885 h 3.4180 M 308.9844,41.0156 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,306.8576 h 2.0508 M 33.4961,299.2622 h 2.0508 M 33.4961,291.6667 h 2.0508 M 33.4961,284.0712 h 2.0508 M 33.4961,276.4757 h 2.0508 M 33.4961,261.2847 h 2.0508 M 33.4961,253.6892 h 2.0508 M 33.4961,246.0938 h 2.0508 M 33.4961,238.4983 h 2.0508 M 33.4961,230.9028 h 2.0508 M 33.4961,215.7118 h 2.0508 M 33.4961,208.1163 h 2.0508 M 33.4961,200.5208 h 2.0508 M 33.4961,192.9253 h 2.0508 M 33.4961,185.3299 h 2.0508 M 33.4961,170.1389 h 2.0508 M 33.4961,162.5434 h 2.0508 M 33.4961,154.9479 h 2.0508 M 33.4961,147.3524 h 2.0508 M 33.4961,139.7569 h 2.0508 M 33.4961,124.5660 h 2.0508 M 33.4961,116.9705 h 2.0508 M 33.4961,109.3750 h 2.0508 M 33.4961,101.7795 h 2.0508 M 33.4961,94.1840 h 2.0508 M 33.4961,78.9931 h 2.0508 M 33.4961,71.3976 h 2.0508 M 33.4961,63.8021 h 2.0508 M 33.4961,56.2066 h 2.0508 M 33.4961,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,268.8802 h 3.4180 M 32.1289,223.3073 h 3.4180 M 32.1289,177.7344 h 3.4180 M 32.1289,132.1615 h 3.4180 M 32.1289,86.5885 h 3.4180 M 32.1289,41.0156 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,41.0156)" stroke="none" text-anchor="end">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,86.5885)" stroke="none" text-anchor="end">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,132.1615)" stroke="none" text-anchor="end">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,177.7344)" stroke="none" text-anchor="end">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,223.3073)" stroke="none" text-anchor="end">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,268.8802)" stroke="none" text-anchor="end">0.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 35.5469,314.4531 v -273.4375 M 81.1198,314.4531 v -273.4375 M 126.6927,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 217.8385,314.4531 v -273.4375 M 263.4115,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 50.7378,41.0156 v -2.0508 M 58.3333,41.0156 v -2.0508 M 65.9288,41.0156 v -2.0508 M 73.5243,41.0156 v -2.0508 M 88.7153,41.0156 v -2.0508 M 96.3108,41.0156 v -2.0508 M 103.9063,41.0156 v -2.0508 M 111.5017,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 134.2882,41.0156 v -2.0508 M 141.8837,41.0156 v -2.0508 M 149.4792,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 164.6701,41.0156 v -2.0508 M 179.8611,41.0156 v -2.0508 M 187.4566,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 202.6476,41.0156 v -2.0508 M 210.2431,41.0156 v -2.0508 M 225.4340,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 240.6250,41.0156 v -2.0508 M 248.2205,41.0156 v -2.0508 M 255.8160,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 278.6024,41.0156 v -2.0508 M 286.1979,41.0156 v -2.0508 M 293.7934,41.0156 v -2.0508 M 301.3889,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,41.0156 v -3.4180 M 81.1198,41.0156 v -3.4180 M 126.6927,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 217.8385,41.0156 v -3.4180 M 263.4115,41.0156 v -3.4180 M 308.9844,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 50.7378,316.5039 v -2.0508 M 58.3333,316.5039 v -2.0508 M 65.9288,316.5039 v -2.0508 M 73.5243,316.5039 v -2.0508 M 88.7153,316.5039 v -2.0508 M 96.3108,316.5039 v -2.0508 M 103.9063,316.5039 v -2.0508 M 111.5017,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 134.2882,316.5039 v -2.0508 M 141.8837,316.5039 v -2.0508 M 149.4792,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 164.6701,316.5039 v -2.0508 M 179.8611,316.5039 v -2.0508 M 187.4566,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 202.6476,316.5039 v -2.0508 M 210.2431,316.5039 v -2.0508 M 225.4340,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 240.6250,316.5039 v -2.0508 M 248.2205,316.5039 v -2.0508 M 255.8160,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 278.6024,316.5039 v -2.0508 M 286.1979,316.5039 v -2.0508 M 293.7934,316.5039 v -2.0508 M 301.3889,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,317.8711 v -3.4180 M 81.1198,317.8711 v -3.4180 M 126.6927,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 217.8385,317.8711 v -3.4180 M 263.4115,317.8711 v -3.4180 M 308.9844,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,308.9844,322.6562)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,263.4115,322.6562)" stroke="none" text-anchor="middle">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,217.8385,322.6562)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,126.6927,322.6562)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,81.1198,322.6562)" stroke="none" text-anchor="middle">0.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,35.5469,322.6562)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(252,253,191)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 308.9844,177.7344 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(251,135,97)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 217.8385,177.7344 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(182,55,121)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 126.6927,177.7344 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(251,135,97)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 308.9844,268.8802 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(182,55,121)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 217.8385,268.8802 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(80,18,124)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 126.6927,268.8802 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(182,55,121)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 308.9844,314.4531 l -0.0000,-91.1458 h -136.7188 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(80,18,124)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 217.8385,314.4531 l -0.0000,-91.1458 h -136.7188 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(0,0,4)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 126.6927,314.4531 l -0.0000,-91.1458 h -91.1458 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,41.0156)" stroke="none" text-anchor="start">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,109.3750)" stroke="none" text-anchor="start">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,177.7344)" stroke="none" text-anchor="start">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,246.0938)" stroke="none" text-anchor="start">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,314.4531)" stroke="none" text-anchor="start">0.0</text></g><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(-0.0000,-273.4375,-13.6719,-0.0000,329.4922,177.7344)" id="gradient80" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(0,0,4)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(1,0,5)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(1,1,6)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(1,1,8)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(2,1,9)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(2,2,11)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(2,2,13)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(3,3,15)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(3,3,18)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(4,4,20)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(5,4,22)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(6,5,24)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(6,5,26)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(7,6,28)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(8,7,30)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(9,7,32)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(10,8,34)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(11,9,36)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(12,9,38)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(13,10,41)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(14,11,43)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(16,11,45)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(17,12,47)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(18,13,49)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(19,13,52)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(20,14,54)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(21,14,56)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(22,15,59)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(24,15,61)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(25,16,63)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(26,16,66)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(28,16,68)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(29,17,71)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(30,17,73)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(32,17,75)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(33,17,78)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(34,17,80)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(36,18,83)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(37,18,85)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(39,18,88)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(41,17,90)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(42,17,92)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(44,17,95)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(45,17,97)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(47,17,99)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(49,17,101)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(51,16,103)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(52,16,105)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(54,16,107)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(56,16,108)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(57,15,110)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(59,15,112)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(61,15,113)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(63,15,114)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(64,15,116)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(66,15,117)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(68,15,118)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(69,16,119)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(71,16,120)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(73,16,120)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(74,16,121)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(76,17,122)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(78,17,123)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(79,18,123)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(81,18,124)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(82,19,124)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(84,19,125)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(86,20,125)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(87,21,126)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(89,21,126)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(90,22,126)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(92,22,127)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(93,23,127)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(95,24,127)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(96,24,128)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(98,25,128)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(100,26,128)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(101,26,128)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(103,27,128)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(104,28,129)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(106,28,129)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(107,29,129)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(109,29,129)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(110,30,129)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(112,31,129)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(114,31,129)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(115,32,129)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(117,33,129)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(118,33,129)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(120,34,129)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(121,34,130)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(123,35,130)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(124,35,130)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(126,36,130)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(128,37,130)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(129,37,129)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(131,38,129)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(132,38,129)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(134,39,129)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(136,39,129)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(137,40,129)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(139,41,129)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(140,41,129)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(142,42,129)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(144,42,129)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(145,43,129)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(147,43,128)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(148,44,128)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(150,44,128)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(152,45,128)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(153,45,128)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(155,46,127)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(156,46,127)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(158,47,127)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(160,47,127)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(161,48,126)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(163,48,126)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(165,49,126)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(166,49,125)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(168,50,125)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(170,51,125)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(171,51,124)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(173,52,124)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(174,52,123)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(176,53,123)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(178,53,123)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(179,54,122)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(181,54,122)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(183,55,121)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(184,55,121)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(186,56,120)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(188,57,120)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(189,57,119)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(191,58,119)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(192,58,118)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(194,59,117)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(196,60,117)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(197,60,116)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(199,61,115)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(200,62,115)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(202,62,114)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(204,63,113)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(205,64,113)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(207,64,112)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(208,65,111)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(210,66,111)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(211,67,110)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(213,68,109)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(214,69,108)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(216,69,108)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(217,70,107)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(219,71,106)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(220,72,105)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(222,73,104)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(223,74,104)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(224,76,103)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(226,77,102)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(227,78,101)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(228,79,100)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(229,80,100)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(231,82,99)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(232,83,98)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(233,84,98)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(234,86,97)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(235,87,96)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(236,88,96)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(237,90,95)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(238,91,94)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(239,93,94)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(240,95,94)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(241,96,93)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(242,98,93)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(242,100,92)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(243,101,92)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(244,103,92)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(244,105,92)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(245,107,92)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(246,108,92)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(246,110,92)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(247,112,92)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(247,114,92)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(248,116,92)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(248,118,92)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(249,120,93)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(249,121,93)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(249,123,93)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(250,125,94)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(250,127,94)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(250,129,95)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(251,131,95)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(251,133,96)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(251,135,97)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(252,137,97)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(252,138,98)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(252,140,99)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(252,142,100)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(252,144,101)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(253,146,102)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(253,148,103)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(253,150,104)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(253,152,105)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(253,154,106)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(253,155,107)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(254,157,108)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(254,159,109)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(254,161,110)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(254,163,111)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(254,165,113)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(254,167,114)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(254,169,115)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(254,170,116)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(254,172,118)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(254,174,119)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(254,176,120)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(254,178,122)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(254,180,123)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(254,182,124)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(254,183,126)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(254,185,127)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(254,187,129)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(254,189,130)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(254,191,132)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(254,193,133)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(254,194,135)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(254,196,136)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(254,198,138)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(254,200,140)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(254,202,141)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(254,204,143)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(254,205,144)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(254,207,146)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(254,209,148)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(254,211,149)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(254,213,151)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(254,215,153)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(254,216,154)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(253,218,156)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(253,220,158)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(253,222,160)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(253,224,161)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(253,226,163)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(253,227,165)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(253,229,167)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(253,231,169)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(253,233,170)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(253,235,172)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(252,236,174)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(252,238,176)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(252,240,178)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(252,242,180)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(252,244,182)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(252,246,184)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(252,247,185)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(252,249,187)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(252,251,189)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(252,253,191)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient80)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g stroke-width="0.8"><path d="M 336.3281,314.4531 h -13.6719 M 336.3281,246.0938 h -13.6719 M 336.3281,177.7344 h -13.6719 M 336.3281,109.3750 h -13.6719 M 336.3281,41.0156 h -13.6719 "/></g><g><path d="M 339.7461,41.0156 h -6.8359 "/></g><g><path d="M 339.7461,109.3750 h -6.8359 "/></g><g><path d="M 339.7461,177.7344 h -6.8359 "/></g><g><path d="M 339.7461,246.0938 h -6.8359 "/></g><g><path d="M 339.7461,314.4531 h -6.8359 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 372 350" font-size="1" width="371.8750" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,268.8802 h 273.4375 M 35.5469,223.3073 h 273.4375 M 35.5469,177.7344 h 273.4375 M 35.5469,132.1615 h 273.4375 M 35.5469,86.5885 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,306.8576 h 2.0508 M 308.9844,299.2622 h 2.0508 M 308.9844,291.6667 h 2.0508 M 308.9844,284.0712 h 2.0508 M 308.9844,276.4757 h 2.0508 M 308.9844,261.2847 h 2.0508 M 308.9844,253.6892 h 2.0508 M 308.9844,246.0938 h 2.0508 M 308.9844,238.4983 h 2.0508 M 308.9844,230.9028 h 2.0508 M 308.9844,215.7118 h 2.0508 M 308.9844,208.1163 h 2.0508 M 308.9844,200.5208 h 2.0508 M 308.9844,192.9253 h 2.0508 M 308.9844,185.3299 h 2.0508 M 308.9844,170.1389 h 2.0508 M 308.9844,162.5434 h 2.0508 M 308.9844,154.9479 h 2.0508 M 308.9844,147.3524 h 2.0508 M 308.9844,139.7569 h 2.0508 M 308.9844,124.5660 h 2.0508 M 308.9844,116.9705 h 2.0508 M 308.9844,109.3750 h 2.0508 M 308.9844,101.7795 h 2.0508 M 308.9844,94.1840 h 2.0508 M 308.9844,78.9931 h 2.0508 M 308.9844,71.3976 h 2.0508 M 308.9844,63.8021 h 2.0508 M 308.9844,56.2066 h 2.0508 M 308.9844,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,268.8802 h 3.4180 M 308.9844,223.3073 h 3.4180 M 308.9844,177.7344 h 3.4180 M 308.9844,132.1615 h 3.4180 M 308.9844,86.5885 h 3.4180 M 308.9844,41.0156 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,306.8576 h 2.0508 M 33.4961,299.2622 h 2.0508 M 33.4961,291.6667 h 2.0508 M 33.4961,284.0712 h 2.0508 M 33.4961,276.4757 h 2.0508 M 33.4961,261.2847 h 2.0508 M 33.4961,253.6892 h 2.0508 M 33.4961,246.0938 h 2.0508 M 33.4961,238.4983 h 2.0508 M 33.4961,230.9028 h 2.0508 M 33.4961,215.7118 h 2.0508 M 33.4961,208.1163 h 2.0508 M 33.4961,200.5208 h 2.0508 M 33.4961,192.9253 h 2.0508 M 33.4961,185.3299 h 2.0508 M 33.4961,170.1389 h 2.0508 M 33.4961,162.5434 h 2.0508 M 33.4961,154.9479 h 2.0508 M 33.4961,147.3524 h 2.0508 M 33.4961,139.7569 h 2.0508 M 33.4961,124.5660 h 2.0508 M 33.4961,116.9705 h 2.0508 M 33.4961,109.3750 h 2.0508 M 33.4961,101.7795 h 2.0508 M 33.4961,94.1840 h 2.0508 M 33.4961,78.9931 h 2.0508 M 33.4961,71.3976 h 2.0508 M 33.4961,63.8021 h 2.0508 M 33.4961,56.2066 h 2.0508 M 33.4961,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,268.8802 h 3.4180 M 32.1289,223.3073 h 3.4180 M 32.1289,177.7344 h 3.4180 M 32.1289,132.1615 h 3.4180 M 32.1289,86.5885 h 3.4180 M 32.1289,41.0156 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,41.0156)" stroke="none" text-anchor="end">30.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,86.5885)" stroke="none" text-anchor="end">25.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,132.1615)" stroke="none" text-anchor="end">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,177.7344)" stroke="none" text-anchor="end">15.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,223.3073)" stroke="none" text-anchor="end">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,268.8802)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 35.5469,314.4531 v -273.4375 M 81.1198,314.4531 v -273.4375 M 126.6927,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 217.8385,314.4531 v -273.4375 M 263.4115,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 50.7378,41.0156 v -2.0508 M 58.3333,41.0156 v -2.0508 M 65.9288,41.0156 v -2.0508 M 73.5243,41.0156 v -2.0508 M 88.7153,41.0156 v -2.0508 M 96.3108,41.0156 v -2.0508 M 103.9062,41.0156 v -2.0508 M 111.5017,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 134.2882,41.0156 v -2.0508 M 141.8837,41.0156 v -2.0508 M 149.4792,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 164.6701,41.0156 v -2.0508 M 179.8611,41.0156 v -2.0508 M 187.4566,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 202.6476,41.0156 v -2.0508 M 210.2431,41.0156 v -2.0508 M 225.4340,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 240.6250,41.0156 v -2.0508 M 248.2205,41.0156 v -2.0508 M 255.8160,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 278.6024,41.0156 v -2.0508 M 286.1979,41.0156 v -2.0508 M 293.7934,41.0156 v -2.0508 M 301.3889,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,41.0156 v -3.4180 M 81.1198,41.0156 v -3.4180 M 126.6927,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 217.8385,41.0156 v -3.4180 M 263.4115,41.0156 v -3.4180 M 308.9844,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 50.7378,316.5039 v -2.0508 M 58.3333,316.5039 v -2.0508 M 65.9288,316.5039 v -2.0508 M 73.5243,316.5039 v -2.0508 M 88.7153,316.5039 v -2.0508 M 96.3108,316.5039 v -2.0508 M 103.9062,316.5039 v -2.0508 M 111.5017,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 134.2882,316.5039 v -2.0508 M 141.8837,316.5039 v -2.0508 M 149.4792,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 164.6701,316.5039 v -2.0508 M 179.8611,316.5039 v -2.0508 M 187.4566,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 202.6476,316.5039 v -2.0508 M 210.2431,316.5039 v -2.0508 M 225.4340,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 240.6250,316.5039 v -2.0508 M 248.2205,316.5039 v -2.0508 M 255.8160,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 278.6024,316.5039 v -2.0508 M 286.1979,316.5039 v -2.0508 M 293.7934,316.5039 v -2.0508 M 301.3889,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 35.5469,317.8711 v -3.4180 M 81.1198,317.8711 v -3.4180 M 126.6927,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 217.8385,317.8711 v -3.4180 M 263.4115,317.8711 v -3.4180 M 308.9844,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,308.9844,322.6562)" stroke="none" text-anchor="middle">30.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,263.4115,322.6562)" stroke="none" text-anchor="middle">25.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,217.8385,322.6562)" stroke="none" text-anchor="middle">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">15.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,126.6927,322.6562)" stroke="none" text-anchor="middle">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,81.1198,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,35.5469,322.6562)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(253,231,37)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 308.9844,177.7344 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 217.8385,177.7344 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 126.6927,177.7344 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 308.9844,268.8802 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 217.8385,268.8802 l -0.0000,-136.7188 h -136.7188 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 126.6927,268.8802 l -0.0000,-136.7188 h -91.1458 l -0.0000,136.7188 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 308.9844,314.4531 l -0.0000,-91.1458 h -136.7188 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 217.8385,314.4531 l -0.0000,-91.1458 h -136.7188 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(68,1,84)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 126.6927,314.4531 l -0.0000,-91.1458 h -91.1458 l -0.0000,91.1458 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,41.0156)" stroke="none" text-anchor="start">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,109.3750)" stroke="none" text-anchor="start">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,177.7344)" stroke="none" text-anchor="start">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,246.0938)" stroke="none" text-anchor="start">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,344.5312,314.4531)" stroke="none" text-anchor="start">0.0</text></g><defs><linearGradient x2="0.5000" y1="0.0000" gradientUnits="userSpaceOnUse" spreadMethod="pad" gradientTransform="matrix(-0.0000,-273.4375,-13.6719,-0.0000,329.4922,177.7344)" id="gradient80" y2="0.0000" x1="-0.5000"><stop stop-opacity="1.0000" offset="0.0000" stop-color="rgb(68,1,84)"/><stop stop-opacity="1.0000" offset="0.0039" stop-color="rgb(68,2,86)"/><stop stop-opacity="1.0000" offset="0.0078" stop-color="rgb(69,4,87)"/><stop stop-opacity="1.0000" offset="0.0118" stop-color="rgb(69,5,89)"/><stop stop-opacity="1.0000" offset="0.0157" stop-color="rgb(70,7,90)"/><stop stop-opacity="1.0000" offset="0.0196" stop-color="rgb(70,8,92)"/><stop stop-opacity="1.0000" offset="0.0235" stop-color="rgb(70,10,93)"/><stop stop-opacity="1.0000" offset="0.0275" stop-color="rgb(70,11,94)"/><stop stop-opacity="1.0000" offset="0.0314" stop-color="rgb(71,13,96)"/><stop stop-opacity="1.0000" offset="0.0353" stop-color="rgb(71,14,97)"/><stop stop-opacity="1.0000" offset="0.0392" stop-color="rgb(71,16,99)"/><stop stop-opacity="1.0000" offset="0.0431" stop-color="rgb(71,17,100)"/><stop stop-opacity="1.0000" offset="0.0471" stop-color="rgb(71,19,101)"/><stop stop-opacity="1.0000" offset="0.0510" stop-color="rgb(72,20,103)"/><stop stop-opacity="1.0000" offset="0.0549" stop-color="rgb(72,22,104)"/><stop stop-opacity="1.0000" offset="0.0588" stop-color="rgb(72,23,105)"/><stop stop-opacity="1.0000" offset="0.0627" stop-color="rgb(72,24,106)"/><stop stop-opacity="1.0000" offset="0.0667" stop-color="rgb(72,26,108)"/><stop stop-opacity="1.0000" offset="0.0706" stop-color="rgb(72,27,109)"/><stop stop-opacity="1.0000" offset="0.0745" stop-color="rgb(72,28,110)"/><stop stop-opacity="1.0000" offset="0.0784" stop-color="rgb(72,29,111)"/><stop stop-opacity="1.0000" offset="0.0824" stop-color="rgb(72,31,112)"/><stop stop-opacity="1.0000" offset="0.0863" stop-color="rgb(72,32,113)"/><stop stop-opacity="1.0000" offset="0.0902" stop-color="rgb(72,33,115)"/><stop stop-opacity="1.0000" offset="0.0941" stop-color="rgb(72,35,116)"/><stop stop-opacity="1.0000" offset="0.0980" stop-color="rgb(72,36,117)"/><stop stop-opacity="1.0000" offset="0.1020" stop-color="rgb(72,37,118)"/><stop stop-opacity="1.0000" offset="0.1059" stop-color="rgb(72,38,119)"/><stop stop-opacity="1.0000" offset="0.1098" stop-color="rgb(72,40,120)"/><stop stop-opacity="1.0000" offset="0.1137" stop-color="rgb(72,41,121)"/><stop stop-opacity="1.0000" offset="0.1176" stop-color="rgb(71,42,122)"/><stop stop-opacity="1.0000" offset="0.1216" stop-color="rgb(71,44,122)"/><stop stop-opacity="1.0000" offset="0.1255" stop-color="rgb(71,45,123)"/><stop stop-opacity="1.0000" offset="0.1294" stop-color="rgb(71,46,124)"/><stop stop-opacity="1.0000" offset="0.1333" stop-color="rgb(71,47,125)"/><stop stop-opacity="1.0000" offset="0.1373" stop-color="rgb(70,48,126)"/><stop stop-opacity="1.0000" offset="0.1412" stop-color="rgb(70,50,126)"/><stop stop-opacity="1.0000" offset="0.1451" stop-color="rgb(70,51,127)"/><stop stop-opacity="1.0000" offset="0.1490" stop-color="rgb(70,52,128)"/><stop stop-opacity="1.0000" offset="0.1529" stop-color="rgb(69,53,129)"/><stop stop-opacity="1.0000" offset="0.1569" stop-color="rgb(69,55,129)"/><stop stop-opacity="1.0000" offset="0.1608" stop-color="rgb(69,56,130)"/><stop stop-opacity="1.0000" offset="0.1647" stop-color="rgb(68,57,131)"/><stop stop-opacity="1.0000" offset="0.1686" stop-color="rgb(68,58,131)"/><stop stop-opacity="1.0000" offset="0.1725" stop-color="rgb(68,59,132)"/><stop stop-opacity="1.0000" offset="0.1765" stop-color="rgb(67,61,132)"/><stop stop-opacity="1.0000" offset="0.1804" stop-color="rgb(67,62,133)"/><stop stop-opacity="1.0000" offset="0.1843" stop-color="rgb(66,63,133)"/><stop stop-opacity="1.0000" offset="0.1882" stop-color="rgb(66,64,134)"/><stop stop-opacity="1.0000" offset="0.1922" stop-color="rgb(66,65,134)"/><stop stop-opacity="1.0000" offset="0.1961" stop-color="rgb(65,66,135)"/><stop stop-opacity="1.0000" offset="0.2000" stop-color="rgb(65,68,135)"/><stop stop-opacity="1.0000" offset="0.2039" stop-color="rgb(64,69,136)"/><stop stop-opacity="1.0000" offset="0.2078" stop-color="rgb(64,70,136)"/><stop stop-opacity="1.0000" offset="0.2118" stop-color="rgb(63,71,136)"/><stop stop-opacity="1.0000" offset="0.2157" stop-color="rgb(63,72,137)"/><stop stop-opacity="1.0000" offset="0.2196" stop-color="rgb(62,73,137)"/><stop stop-opacity="1.0000" offset="0.2235" stop-color="rgb(62,74,137)"/><stop stop-opacity="1.0000" offset="0.2275" stop-color="rgb(62,76,138)"/><stop stop-opacity="1.0000" offset="0.2314" stop-color="rgb(61,77,138)"/><stop stop-opacity="1.0000" offset="0.2353" stop-color="rgb(61,78,138)"/><stop stop-opacity="1.0000" offset="0.2392" stop-color="rgb(60,79,138)"/><stop stop-opacity="1.0000" offset="0.2431" stop-color="rgb(60,80,139)"/><stop stop-opacity="1.0000" offset="0.2471" stop-color="rgb(59,81,139)"/><stop stop-opacity="1.0000" offset="0.2510" stop-color="rgb(59,82,139)"/><stop stop-opacity="1.0000" offset="0.2549" stop-color="rgb(58,83,139)"/><stop stop-opacity="1.0000" offset="0.2588" stop-color="rgb(58,84,140)"/><stop stop-opacity="1.0000" offset="0.2627" stop-color="rgb(57,85,140)"/><stop stop-opacity="1.0000" offset="0.2667" stop-color="rgb(57,86,140)"/><stop stop-opacity="1.0000" offset="0.2706" stop-color="rgb(56,88,140)"/><stop stop-opacity="1.0000" offset="0.2745" stop-color="rgb(56,89,140)"/><stop stop-opacity="1.0000" offset="0.2784" stop-color="rgb(55,90,140)"/><stop stop-opacity="1.0000" offset="0.2824" stop-color="rgb(55,91,141)"/><stop stop-opacity="1.0000" offset="0.2863" stop-color="rgb(54,92,141)"/><stop stop-opacity="1.0000" offset="0.2902" stop-color="rgb(54,93,141)"/><stop stop-opacity="1.0000" offset="0.2941" stop-color="rgb(53,94,141)"/><stop stop-opacity="1.0000" offset="0.2980" stop-color="rgb(53,95,141)"/><stop stop-opacity="1.0000" offset="0.3020" stop-color="rgb(52,96,141)"/><stop stop-opacity="1.0000" offset="0.3059" stop-color="rgb(52,97,141)"/><stop stop-opacity="1.0000" offset="0.3098" stop-color="rgb(51,98,141)"/><stop stop-opacity="1.0000" offset="0.3137" stop-color="rgb(51,99,141)"/><stop stop-opacity="1.0000" offset="0.3176" stop-color="rgb(50,100,142)"/><stop stop-opacity="1.0000" offset="0.3216" stop-color="rgb(50,101,142)"/><stop stop-opacity="1.0000" offset="0.3255" stop-color="rgb(49,102,142)"/><stop stop-opacity="1.0000" offset="0.3294" stop-color="rgb(49,103,142)"/><stop stop-opacity="1.0000" offset="0.3333" stop-color="rgb(49,104,142)"/><stop stop-opacity="1.0000" offset="0.3373" stop-color="rgb(48,105,142)"/><stop stop-opacity="1.0000" offset="0.3412" stop-color="rgb(48,106,142)"/><stop stop-opacity="1.0000" offset="0.3451" stop-color="rgb(47,107,142)"/><stop stop-opacity="1.0000" offset="0.3490" stop-color="rgb(47,108,142)"/><stop stop-opacity="1.0000" offset="0.3529" stop-color="rgb(46,109,142)"/><stop stop-opacity="1.0000" offset="0.3569" stop-color="rgb(46,110,142)"/><stop stop-opacity="1.0000" offset="0.3608" stop-color="rgb(46,111,142)"/><stop stop-opacity="1.0000" offset="0.3647" stop-color="rgb(45,112,142)"/><stop stop-opacity="1.0000" offset="0.3686" stop-color="rgb(45,113,142)"/><stop stop-opacity="1.0000" offset="0.3725" stop-color="rgb(44,113,142)"/><stop stop-opacity="1.0000" offset="0.3765" stop-color="rgb(44,114,142)"/><stop stop-opacity="1.0000" offset="0.3804" stop-color="rgb(44,115,142)"/><stop stop-opacity="1.0000" offset="0.3843" stop-color="rgb(43,116,142)"/><stop stop-opacity="1.0000" offset="0.3882" stop-color="rgb(43,117,142)"/><stop stop-opacity="1.0000" offset="0.3922" stop-color="rgb(42,118,142)"/><stop stop-opacity="1.0000" offset="0.3961" stop-color="rgb(42,119,142)"/><stop stop-opacity="1.0000" offset="0.4000" stop-color="rgb(42,120,142)"/><stop stop-opacity="1.0000" offset="0.4039" stop-color="rgb(41,121,142)"/><stop stop-opacity="1.0000" offset="0.4078" stop-color="rgb(41,122,142)"/><stop stop-opacity="1.0000" offset="0.4118" stop-color="rgb(41,123,142)"/><stop stop-opacity="1.0000" offset="0.4157" stop-color="rgb(40,124,142)"/><stop stop-opacity="1.0000" offset="0.4196" stop-color="rgb(40,125,142)"/><stop stop-opacity="1.0000" offset="0.4235" stop-color="rgb(39,126,142)"/><stop stop-opacity="1.0000" offset="0.4275" stop-color="rgb(39,127,142)"/><stop stop-opacity="1.0000" offset="0.4314" stop-color="rgb(39,128,142)"/><stop stop-opacity="1.0000" offset="0.4353" stop-color="rgb(38,129,142)"/><stop stop-opacity="1.0000" offset="0.4392" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4431" stop-color="rgb(38,130,142)"/><stop stop-opacity="1.0000" offset="0.4471" stop-color="rgb(37,131,142)"/><stop stop-opacity="1.0000" offset="0.4510" stop-color="rgb(37,132,142)"/><stop stop-opacity="1.0000" offset="0.4549" stop-color="rgb(37,133,142)"/><stop stop-opacity="1.0000" offset="0.4588" stop-color="rgb(36,134,142)"/><stop stop-opacity="1.0000" offset="0.4627" stop-color="rgb(36,135,142)"/><stop stop-opacity="1.0000" offset="0.4667" stop-color="rgb(35,136,142)"/><stop stop-opacity="1.0000" offset="0.4706" stop-color="rgb(35,137,142)"/><stop stop-opacity="1.0000" offset="0.4745" stop-color="rgb(35,138,141)"/><stop stop-opacity="1.0000" offset="0.4784" stop-color="rgb(34,139,141)"/><stop stop-opacity="1.0000" offset="0.4824" stop-color="rgb(34,140,141)"/><stop stop-opacity="1.0000" offset="0.4863" stop-color="rgb(34,141,141)"/><stop stop-opacity="1.0000" offset="0.4902" stop-color="rgb(33,142,141)"/><stop stop-opacity="1.0000" offset="0.4941" stop-color="rgb(33,143,141)"/><stop stop-opacity="1.0000" offset="0.4980" stop-color="rgb(33,144,141)"/><stop stop-opacity="1.0000" offset="0.5020" stop-color="rgb(33,145,140)"/><stop stop-opacity="1.0000" offset="0.5059" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5098" stop-color="rgb(32,146,140)"/><stop stop-opacity="1.0000" offset="0.5137" stop-color="rgb(32,147,140)"/><stop stop-opacity="1.0000" offset="0.5176" stop-color="rgb(31,148,140)"/><stop stop-opacity="1.0000" offset="0.5216" stop-color="rgb(31,149,139)"/><stop stop-opacity="1.0000" offset="0.5255" stop-color="rgb(31,150,139)"/><stop stop-opacity="1.0000" offset="0.5294" stop-color="rgb(31,151,139)"/><stop stop-opacity="1.0000" offset="0.5333" stop-color="rgb(31,152,139)"/><stop stop-opacity="1.0000" offset="0.5373" stop-color="rgb(31,153,138)"/><stop stop-opacity="1.0000" offset="0.5412" stop-color="rgb(31,154,138)"/><stop stop-opacity="1.0000" offset="0.5451" stop-color="rgb(30,155,138)"/><stop stop-opacity="1.0000" offset="0.5490" stop-color="rgb(30,156,137)"/><stop stop-opacity="1.0000" offset="0.5529" stop-color="rgb(30,157,137)"/><stop stop-opacity="1.0000" offset="0.5569" stop-color="rgb(31,158,137)"/><stop stop-opacity="1.0000" offset="0.5608" stop-color="rgb(31,159,136)"/><stop stop-opacity="1.0000" offset="0.5647" stop-color="rgb(31,160,136)"/><stop stop-opacity="1.0000" offset="0.5686" stop-color="rgb(31,161,136)"/><stop stop-opacity="1.0000" offset="0.5725" stop-color="rgb(31,161,135)"/><stop stop-opacity="1.0000" offset="0.5765" stop-color="rgb(31,162,135)"/><stop stop-opacity="1.0000" offset="0.5804" stop-color="rgb(32,163,134)"/><stop stop-opacity="1.0000" offset="0.5843" stop-color="rgb(32,164,134)"/><stop stop-opacity="1.0000" offset="0.5882" stop-color="rgb(33,165,133)"/><stop stop-opacity="1.0000" offset="0.5922" stop-color="rgb(33,166,133)"/><stop stop-opacity="1.0000" offset="0.5961" stop-color="rgb(34,167,133)"/><stop stop-opacity="1.0000" offset="0.6000" stop-color="rgb(34,168,132)"/><stop stop-opacity="1.0000" offset="0.6039" stop-color="rgb(35,169,131)"/><stop stop-opacity="1.0000" offset="0.6078" stop-color="rgb(36,170,131)"/><stop stop-opacity="1.0000" offset="0.6118" stop-color="rgb(37,171,130)"/><stop stop-opacity="1.0000" offset="0.6157" stop-color="rgb(37,172,130)"/><stop stop-opacity="1.0000" offset="0.6196" stop-color="rgb(38,173,129)"/><stop stop-opacity="1.0000" offset="0.6235" stop-color="rgb(39,173,129)"/><stop stop-opacity="1.0000" offset="0.6275" stop-color="rgb(40,174,128)"/><stop stop-opacity="1.0000" offset="0.6314" stop-color="rgb(41,175,127)"/><stop stop-opacity="1.0000" offset="0.6353" stop-color="rgb(42,176,127)"/><stop stop-opacity="1.0000" offset="0.6392" stop-color="rgb(44,177,126)"/><stop stop-opacity="1.0000" offset="0.6431" stop-color="rgb(45,178,125)"/><stop stop-opacity="1.0000" offset="0.6471" stop-color="rgb(46,179,124)"/><stop stop-opacity="1.0000" offset="0.6510" stop-color="rgb(47,180,124)"/><stop stop-opacity="1.0000" offset="0.6549" stop-color="rgb(49,181,123)"/><stop stop-opacity="1.0000" offset="0.6588" stop-color="rgb(50,182,122)"/><stop stop-opacity="1.0000" offset="0.6627" stop-color="rgb(52,182,121)"/><stop stop-opacity="1.0000" offset="0.6667" stop-color="rgb(53,183,121)"/><stop stop-opacity="1.0000" offset="0.6706" stop-color="rgb(55,184,120)"/><stop stop-opacity="1.0000" offset="0.6745" stop-color="rgb(56,185,119)"/><stop stop-opacity="1.0000" offset="0.6784" stop-color="rgb(58,186,118)"/><stop stop-opacity="1.0000" offset="0.6824" stop-color="rgb(59,187,117)"/><stop stop-opacity="1.0000" offset="0.6863" stop-color="rgb(61,188,116)"/><stop stop-opacity="1.0000" offset="0.6902" stop-color="rgb(63,188,115)"/><stop stop-opacity="1.0000" offset="0.6941" stop-color="rgb(64,189,114)"/><stop stop-opacity="1.0000" offset="0.6980" stop-color="rgb(66,190,113)"/><stop stop-opacity="1.0000" offset="0.7020" stop-color="rgb(68,191,112)"/><stop stop-opacity="1.0000" offset="0.7059" stop-color="rgb(70,192,111)"/><stop stop-opacity="1.0000" offset="0.7098" stop-color="rgb(72,193,110)"/><stop stop-opacity="1.0000" offset="0.7137" stop-color="rgb(74,193,109)"/><stop stop-opacity="1.0000" offset="0.7176" stop-color="rgb(76,194,108)"/><stop stop-opacity="1.0000" offset="0.7216" stop-color="rgb(78,195,107)"/><stop stop-opacity="1.0000" offset="0.7255" stop-color="rgb(80,196,106)"/><stop stop-opacity="1.0000" offset="0.7294" stop-color="rgb(82,197,105)"/><stop stop-opacity="1.0000" offset="0.7333" stop-color="rgb(84,197,104)"/><stop stop-opacity="1.0000" offset="0.7373" stop-color="rgb(86,198,103)"/><stop stop-opacity="1.0000" offset="0.7412" stop-color="rgb(88,199,101)"/><stop stop-opacity="1.0000" offset="0.7451" stop-color="rgb(90,200,100)"/><stop stop-opacity="1.0000" offset="0.7490" stop-color="rgb(92,200,99)"/><stop stop-opacity="1.0000" offset="0.7529" stop-color="rgb(94,201,98)"/><stop stop-opacity="1.0000" offset="0.7569" stop-color="rgb(96,202,96)"/><stop stop-opacity="1.0000" offset="0.7608" stop-color="rgb(99,203,95)"/><stop stop-opacity="1.0000" offset="0.7647" stop-color="rgb(101,203,94)"/><stop stop-opacity="1.0000" offset="0.7686" stop-color="rgb(103,204,92)"/><stop stop-opacity="1.0000" offset="0.7725" stop-color="rgb(105,205,91)"/><stop stop-opacity="1.0000" offset="0.7765" stop-color="rgb(108,205,90)"/><stop stop-opacity="1.0000" offset="0.7804" stop-color="rgb(110,206,88)"/><stop stop-opacity="1.0000" offset="0.7843" stop-color="rgb(112,207,87)"/><stop stop-opacity="1.0000" offset="0.7882" stop-color="rgb(115,208,86)"/><stop stop-opacity="1.0000" offset="0.7922" stop-color="rgb(117,208,84)"/><stop stop-opacity="1.0000" offset="0.7961" stop-color="rgb(119,209,83)"/><stop stop-opacity="1.0000" offset="0.8000" stop-color="rgb(122,209,81)"/><stop stop-opacity="1.0000" offset="0.8039" stop-color="rgb(124,210,80)"/><stop stop-opacity="1.0000" offset="0.8078" stop-color="rgb(127,211,78)"/><stop stop-opacity="1.0000" offset="0.8118" stop-color="rgb(129,211,77)"/><stop stop-opacity="1.0000" offset="0.8157" stop-color="rgb(132,212,75)"/><stop stop-opacity="1.0000" offset="0.8196" stop-color="rgb(134,213,73)"/><stop stop-opacity="1.0000" offset="0.8235" stop-color="rgb(137,213,72)"/><stop stop-opacity="1.0000" offset="0.8275" stop-color="rgb(139,214,70)"/><stop stop-opacity="1.0000" offset="0.8314" stop-color="rgb(142,214,69)"/><stop stop-opacity="1.0000" offset="0.8353" stop-color="rgb(144,215,67)"/><stop stop-opacity="1.0000" offset="0.8392" stop-color="rgb(147,215,65)"/><stop stop-opacity="1.0000" offset="0.8431" stop-color="rgb(149,216,64)"/><stop stop-opacity="1.0000" offset="0.8471" stop-color="rgb(152,216,62)"/><stop stop-opacity="1.0000" offset="0.8510" stop-color="rgb(155,217,60)"/><stop stop-opacity="1.0000" offset="0.8549" stop-color="rgb(157,217,59)"/><stop stop-opacity="1.0000" offset="0.8588" stop-color="rgb(160,218,57)"/><stop stop-opacity="1.0000" offset="0.8627" stop-color="rgb(162,218,55)"/><stop stop-opacity="1.0000" offset="0.8667" stop-color="rgb(165,219,54)"/><stop stop-opacity="1.0000" offset="0.8706" stop-color="rgb(168,219,52)"/><stop stop-opacity="1.0000" offset="0.8745" stop-color="rgb(170,220,50)"/><stop stop-opacity="1.0000" offset="0.8784" stop-color="rgb(173,220,48)"/><stop stop-opacity="1.0000" offset="0.8824" stop-color="rgb(176,221,47)"/><stop stop-opacity="1.0000" offset="0.8863" stop-color="rgb(178,221,45)"/><stop stop-opacity="1.0000" offset="0.8902" stop-color="rgb(181,222,43)"/><stop stop-opacity="1.0000" offset="0.8941" stop-color="rgb(184,222,41)"/><stop stop-opacity="1.0000" offset="0.8980" stop-color="rgb(186,222,40)"/><stop stop-opacity="1.0000" offset="0.9020" stop-color="rgb(189,223,38)"/><stop stop-opacity="1.0000" offset="0.9059" stop-color="rgb(192,223,37)"/><stop stop-opacity="1.0000" offset="0.9098" stop-color="rgb(194,223,35)"/><stop stop-opacity="1.0000" offset="0.9137" stop-color="rgb(197,224,33)"/><stop stop-opacity="1.0000" offset="0.9176" stop-color="rgb(200,224,32)"/><stop stop-opacity="1.0000" offset="0.9216" stop-color="rgb(202,225,31)"/><stop stop-opacity="1.0000" offset="0.9255" stop-color="rgb(205,225,29)"/><stop stop-opacity="1.0000" offset="0.9294" stop-color="rgb(208,225,28)"/><stop stop-opacity="1.0000" offset="0.9333" stop-color="rgb(210,226,27)"/><stop stop-opacity="1.0000" offset="0.9373" stop-color="rgb(213,226,26)"/><stop stop-opacity="1.0000" offset="0.9412" stop-color="rgb(216,226,25)"/><stop stop-opacity="1.0000" offset="0.9451" stop-color="rgb(218,227,25)"/><stop stop-opacity="1.0000" offset="0.9490" stop-color="rgb(221,227,24)"/><stop stop-opacity="1.0000" offset="0.9529" stop-color="rgb(223,227,24)"/><stop stop-opacity="1.0000" offset="0.9569" stop-color="rgb(226,228,24)"/><stop stop-opacity="1.0000" offset="0.9608" stop-color="rgb(229,228,25)"/><stop stop-opacity="1.0000" offset="0.9647" stop-color="rgb(231,228,25)"/><stop stop-opacity="1.0000" offset="0.9686" stop-color="rgb(234,229,26)"/><stop stop-opacity="1.0000" offset="0.9725" stop-color="rgb(236,229,27)"/><stop stop-opacity="1.0000" offset="0.9765" stop-color="rgb(239,229,28)"/><stop stop-opacity="1.0000" offset="0.9804" stop-color="rgb(241,229,29)"/><stop stop-opacity="1.0000" offset="0.9843" stop-color="rgb(244,230,30)"/><stop stop-opacity="1.0000" offset="0.9882" stop-color="rgb(246,230,32)"/><stop stop-opacity="1.0000" offset="0.9922" stop-color="rgb(248,230,33)"/><stop stop-opacity="1.0000" offset="0.9961" stop-color="rgb(251,231,35)"/><stop stop-opacity="1.0000" offset="1.0000" stop-color="rgb(253,231,37)"/></linearGradient></defs><g fill-opacity="1" stroke-width="0.0" fill="url(#gradient80)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g stroke-width="0.8"><path d="M 336.3281,314.4531 h -13.6719 M 336.3281,246.0938 h -13.6719 M 336.3281,177.7344 h -13.6719 M 336.3281,109.3750 h -13.6719 M 336.3281,41.0156 h -13.6719 "/></g><g><path d="M 339.7461,41.0156 h -6.8359 "/></g><g><path d="M 339.7461,109.3750 h -6.8359 "/></g><g><path d="M 339.7461,177.7344 h -6.8359 "/></g><g><path d="M 339.7461,246.0938 h -6.8359 "/></g><g><path d="M 339.7461,314.4531 h -6.8359 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 336.3281,41.0156 l -13.6719,0.0000 v 273.4375 l 13.6719,0.0000 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 350 350" font-size="1" width="350.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(253,231,37)"><path d="M 350.0000,105.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(171,220,50)"><path d="M 280.0000,105.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><path d="M 210.0000,105.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(40,174,128)"><path d="M 140.0000,105.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><path d="M 70.0000,105.0000 l -0.0000,-105.0000 h -70.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(171,220,50)"><path d="M 350.0000,175.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><path d="M 280.0000,175.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(40,174,128)"><path d="M 210.0000,175.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><path d="M 140.0000,175.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(44,114,142)"><path d="M 70.0000,175.0000 l -0.0000,-105.0000 h -70.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(93,201,99)"><path d="M 350.0000,245.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(40,174,128)"><path d="M 280.0000,245.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><path d="M 210.0000,245.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(44,114,142)"><path d="M 140.0000,245.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><path d="M 70.0000,245.0000 l -0.0000,-105.0000 h -70.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(40,174,128)"><path d="M 350.0000,315.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><path d="M 280.0000,315.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(44,114,142)"><path d="M 210.0000,315.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><path d="M 140.0000,315.0000 l -0.0000,-105.0000 h -105.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(71,45,123)"><path d="M 70.0000,315.0000 l -0.0000,-105.0000 h -70.0000 l -0.0000,105.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(33,144,140)"><path d="M 350.0000,350.0000 l -0.0000,-70.0000 h -105.0000 l -0.0000,70.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(44,114,142)"><path d="M 280.0000,350.0000 l -0.0000,-70.0000 h -105.0000 l -0.0000,70.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(59,82,139)"><path d="M 210.0000,350.0000 l -0.0000,-70.0000 h -105.0000 l -0.0000,70.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(71,45,123)"><path d="M 140.0000,350.0000 l -0.0000,-70.0000 h -105.0000 l -0.0000,70.0000 Z"/></g><g fill-opacity="1.0" stroke-width="0.0" fill="rgb(68,1,84)"><path d="M 70.0000,350.0000 l -0.0000,-70.0000 h -70.0000 l -0.0000,70.0000 Z"/></g></svg>
+ diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 350 350" font-size="1" width="350.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><image transform="matrix(7.0000,0.0000,0.0000,7.0000,0.0000,0.0000)" height="50" width="50" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAfElEQVR4nO3OoQmAUBSG0ecoYnlBi9UqvC5WkxtYLXZF3ENwD3ewO4TFDf504ZYPzgAn5McmxGsRhnsUzqcWvrcQAi1atGjRMmmV0y54pWnRokWLlk2r6VbBK02LFi1atGxaqZoFrzQtWrRo0bJptVkveKVp0aJFi5ZJ6wfyJISdgu5TiwAAAABJRU5ErkJggg=="/></svg>
+ diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 350 350" font-size="1" width="350.0000" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><image transform="matrix(70.0000,0.0000,0.0000,70.0000,0.0000,0.0000)" height="5" width="5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAMUlEQVR4nGNQnNCjsa4h9mTy6jtGv58rM+gU9SELMVgHdSMLMbjrViMLMbgwhiALAQBWtSALg7qxawAAAABJRU5ErkJggg=="/></svg>
+ diagrams/src_Plots_Types_Histogram_cdfDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,264.7372 h 273.4375 M 35.5469,215.0213 h 273.4375 M 35.5469,165.3054 h 273.4375 M 35.5469,115.5895 h 273.4375 M 35.5469,65.8736 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,306.1671 h 2.0508 M 308.9844,297.8812 h 2.0508 M 308.9844,289.5952 h 2.0508 M 308.9844,281.3092 h 2.0508 M 308.9844,273.0232 h 2.0508 M 308.9844,256.4512 h 2.0508 M 308.9844,248.1652 h 2.0508 M 308.9844,239.8793 h 2.0508 M 308.9844,231.5933 h 2.0508 M 308.9844,223.3073 h 2.0508 M 308.9844,206.7353 h 2.0508 M 308.9844,198.4493 h 2.0508 M 308.9844,190.1634 h 2.0508 M 308.9844,181.8774 h 2.0508 M 308.9844,173.5914 h 2.0508 M 308.9844,157.0194 h 2.0508 M 308.9844,148.7334 h 2.0508 M 308.9844,140.4474 h 2.0508 M 308.9844,132.1615 h 2.0508 M 308.9844,123.8755 h 2.0508 M 308.9844,107.3035 h 2.0508 M 308.9844,99.0175 h 2.0508 M 308.9844,90.7315 h 2.0508 M 308.9844,82.4455 h 2.0508 M 308.9844,74.1596 h 2.0508 M 308.9844,57.5876 h 2.0508 M 308.9844,49.3016 h 2.0508 M 308.9844,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,264.7372 h 3.4180 M 308.9844,215.0213 h 3.4180 M 308.9844,165.3054 h 3.4180 M 308.9844,115.5895 h 3.4180 M 308.9844,65.8736 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,306.1671 h 2.0508 M 33.4961,297.8812 h 2.0508 M 33.4961,289.5952 h 2.0508 M 33.4961,281.3092 h 2.0508 M 33.4961,273.0232 h 2.0508 M 33.4961,256.4512 h 2.0508 M 33.4961,248.1652 h 2.0508 M 33.4961,239.8793 h 2.0508 M 33.4961,231.5933 h 2.0508 M 33.4961,223.3073 h 2.0508 M 33.4961,206.7353 h 2.0508 M 33.4961,198.4493 h 2.0508 M 33.4961,190.1634 h 2.0508 M 33.4961,181.8774 h 2.0508 M 33.4961,173.5914 h 2.0508 M 33.4961,157.0194 h 2.0508 M 33.4961,148.7334 h 2.0508 M 33.4961,140.4474 h 2.0508 M 33.4961,132.1615 h 2.0508 M 33.4961,123.8755 h 2.0508 M 33.4961,107.3035 h 2.0508 M 33.4961,99.0175 h 2.0508 M 33.4961,90.7315 h 2.0508 M 33.4961,82.4455 h 2.0508 M 33.4961,74.1596 h 2.0508 M 33.4961,57.5876 h 2.0508 M 33.4961,49.3016 h 2.0508 M 33.4961,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,264.7372 h 3.4180 M 32.1289,215.0213 h 3.4180 M 32.1289,165.3054 h 3.4180 M 32.1289,115.5895 h 3.4180 M 32.1289,65.8736 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,65.8736)" stroke="none" text-anchor="end">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,115.5895)" stroke="none" text-anchor="end">0.8</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,165.3054)" stroke="none" text-anchor="end">0.6</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,215.0213)" stroke="none" text-anchor="end">0.4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,264.7372)" stroke="none" text-anchor="end">0.2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -236.9792 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -220.4072 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -190.5777 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -157.4337 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -107.7178 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -74.5739 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -26.5152 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -6.6288 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Histogram_countDensityDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,248.1652 h 273.4375 M 35.5469,181.8774 h 273.4375 M 35.5469,115.5895 h 273.4375 M 35.5469,49.3016 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,303.4051 h 2.0508 M 308.9844,292.3572 h 2.0508 M 308.9844,281.3092 h 2.0508 M 308.9844,270.2612 h 2.0508 M 308.9844,259.2132 h 2.0508 M 308.9844,237.1173 h 2.0508 M 308.9844,226.0693 h 2.0508 M 308.9844,215.0213 h 2.0508 M 308.9844,203.9733 h 2.0508 M 308.9844,192.9253 h 2.0508 M 308.9844,170.8294 h 2.0508 M 308.9844,159.7814 h 2.0508 M 308.9844,148.7334 h 2.0508 M 308.9844,137.6854 h 2.0508 M 308.9844,126.6375 h 2.0508 M 308.9844,104.5415 h 2.0508 M 308.9844,93.4935 h 2.0508 M 308.9844,82.4455 h 2.0508 M 308.9844,71.3976 h 2.0508 M 308.9844,60.3496 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,248.1652 h 3.4180 M 308.9844,181.8774 h 3.4180 M 308.9844,115.5895 h 3.4180 M 308.9844,49.3016 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,303.4051 h 2.0508 M 33.4961,292.3572 h 2.0508 M 33.4961,281.3092 h 2.0508 M 33.4961,270.2612 h 2.0508 M 33.4961,259.2132 h 2.0508 M 33.4961,237.1173 h 2.0508 M 33.4961,226.0693 h 2.0508 M 33.4961,215.0213 h 2.0508 M 33.4961,203.9733 h 2.0508 M 33.4961,192.9253 h 2.0508 M 33.4961,170.8294 h 2.0508 M 33.4961,159.7814 h 2.0508 M 33.4961,148.7334 h 2.0508 M 33.4961,137.6854 h 2.0508 M 33.4961,126.6375 h 2.0508 M 33.4961,104.5415 h 2.0508 M 33.4961,93.4935 h 2.0508 M 33.4961,82.4455 h 2.0508 M 33.4961,71.3976 h 2.0508 M 33.4961,60.3496 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,248.1652 h 3.4180 M 32.1289,181.8774 h 3.4180 M 32.1289,115.5895 h 3.4180 M 32.1289,49.3016 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,49.3016)" stroke="none" text-anchor="end">80.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,115.5895)" stroke="none" text-anchor="end">60.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,181.8774)" stroke="none" text-anchor="end">40.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,248.1652)" stroke="none" text-anchor="end">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -41.4299 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -16.5720 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -82.8598 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -149.1477 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -99.4318 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -33.1439 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Histogram_countDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,273.0232 h 273.4375 M 35.5469,231.5933 h 273.4375 M 35.5469,190.1634 h 273.4375 M 35.5469,148.7334 h 273.4375 M 35.5469,107.3035 h 273.4375 M 35.5469,65.8736 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,307.5481 h 2.0508 M 308.9844,300.6432 h 2.0508 M 308.9844,293.7382 h 2.0508 M 308.9844,286.8332 h 2.0508 M 308.9844,279.9282 h 2.0508 M 308.9844,266.1182 h 2.0508 M 308.9844,259.2132 h 2.0508 M 308.9844,252.3082 h 2.0508 M 308.9844,245.4033 h 2.0508 M 308.9844,238.4983 h 2.0508 M 308.9844,224.6883 h 2.0508 M 308.9844,217.7833 h 2.0508 M 308.9844,210.8783 h 2.0508 M 308.9844,203.9733 h 2.0508 M 308.9844,197.0683 h 2.0508 M 308.9844,183.2584 h 2.0508 M 308.9844,176.3534 h 2.0508 M 308.9844,169.4484 h 2.0508 M 308.9844,162.5434 h 2.0508 M 308.9844,155.6384 h 2.0508 M 308.9844,141.8284 h 2.0508 M 308.9844,134.9235 h 2.0508 M 308.9844,128.0185 h 2.0508 M 308.9844,121.1135 h 2.0508 M 308.9844,114.2085 h 2.0508 M 308.9844,100.3985 h 2.0508 M 308.9844,93.4935 h 2.0508 M 308.9844,86.5885 h 2.0508 M 308.9844,79.6836 h 2.0508 M 308.9844,72.7786 h 2.0508 M 308.9844,58.9686 h 2.0508 M 308.9844,52.0636 h 2.0508 M 308.9844,45.1586 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,273.0232 h 3.4180 M 308.9844,231.5933 h 3.4180 M 308.9844,190.1634 h 3.4180 M 308.9844,148.7334 h 3.4180 M 308.9844,107.3035 h 3.4180 M 308.9844,65.8736 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,307.5481 h 2.0508 M 33.4961,300.6432 h 2.0508 M 33.4961,293.7382 h 2.0508 M 33.4961,286.8332 h 2.0508 M 33.4961,279.9282 h 2.0508 M 33.4961,266.1182 h 2.0508 M 33.4961,259.2132 h 2.0508 M 33.4961,252.3082 h 2.0508 M 33.4961,245.4033 h 2.0508 M 33.4961,238.4983 h 2.0508 M 33.4961,224.6883 h 2.0508 M 33.4961,217.7833 h 2.0508 M 33.4961,210.8783 h 2.0508 M 33.4961,203.9733 h 2.0508 M 33.4961,197.0683 h 2.0508 M 33.4961,183.2584 h 2.0508 M 33.4961,176.3534 h 2.0508 M 33.4961,169.4484 h 2.0508 M 33.4961,162.5434 h 2.0508 M 33.4961,155.6384 h 2.0508 M 33.4961,141.8284 h 2.0508 M 33.4961,134.9235 h 2.0508 M 33.4961,128.0185 h 2.0508 M 33.4961,121.1135 h 2.0508 M 33.4961,114.2085 h 2.0508 M 33.4961,100.3985 h 2.0508 M 33.4961,93.4935 h 2.0508 M 33.4961,86.5885 h 2.0508 M 33.4961,79.6836 h 2.0508 M 33.4961,72.7786 h 2.0508 M 33.4961,58.9686 h 2.0508 M 33.4961,52.0636 h 2.0508 M 33.4961,45.1586 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,273.0232 h 3.4180 M 32.1289,231.5933 h 3.4180 M 32.1289,190.1634 h 3.4180 M 32.1289,148.7334 h 3.4180 M 32.1289,107.3035 h 3.4180 M 32.1289,65.8736 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,65.8736)" stroke="none" text-anchor="end">30.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,107.3035)" stroke="none" text-anchor="end">25.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,148.7334)" stroke="none" text-anchor="end">20.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,190.1634)" stroke="none" text-anchor="end">15.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,231.5933)" stroke="none" text-anchor="end">10.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,273.0232)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -41.4299 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -16.5720 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -82.8598 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -149.1477 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -99.4318 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -33.1439 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Histogram_cumilativeDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,264.7372 h 273.4375 M 35.5469,215.0213 h 273.4375 M 35.5469,165.3054 h 273.4375 M 35.5469,115.5895 h 273.4375 M 35.5469,65.8736 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,306.1671 h 2.0508 M 308.9844,297.8812 h 2.0508 M 308.9844,289.5952 h 2.0508 M 308.9844,281.3092 h 2.0508 M 308.9844,273.0232 h 2.0508 M 308.9844,256.4512 h 2.0508 M 308.9844,248.1652 h 2.0508 M 308.9844,239.8793 h 2.0508 M 308.9844,231.5933 h 2.0508 M 308.9844,223.3073 h 2.0508 M 308.9844,206.7353 h 2.0508 M 308.9844,198.4493 h 2.0508 M 308.9844,190.1634 h 2.0508 M 308.9844,181.8774 h 2.0508 M 308.9844,173.5914 h 2.0508 M 308.9844,157.0194 h 2.0508 M 308.9844,148.7334 h 2.0508 M 308.9844,140.4474 h 2.0508 M 308.9844,132.1615 h 2.0508 M 308.9844,123.8755 h 2.0508 M 308.9844,107.3035 h 2.0508 M 308.9844,99.0175 h 2.0508 M 308.9844,90.7315 h 2.0508 M 308.9844,82.4455 h 2.0508 M 308.9844,74.1596 h 2.0508 M 308.9844,57.5876 h 2.0508 M 308.9844,49.3016 h 2.0508 M 308.9844,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,264.7372 h 3.4180 M 308.9844,215.0213 h 3.4180 M 308.9844,165.3054 h 3.4180 M 308.9844,115.5895 h 3.4180 M 308.9844,65.8736 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,306.1671 h 2.0508 M 33.4961,297.8812 h 2.0508 M 33.4961,289.5952 h 2.0508 M 33.4961,281.3092 h 2.0508 M 33.4961,273.0232 h 2.0508 M 33.4961,256.4512 h 2.0508 M 33.4961,248.1652 h 2.0508 M 33.4961,239.8793 h 2.0508 M 33.4961,231.5933 h 2.0508 M 33.4961,223.3073 h 2.0508 M 33.4961,206.7353 h 2.0508 M 33.4961,198.4493 h 2.0508 M 33.4961,190.1634 h 2.0508 M 33.4961,181.8774 h 2.0508 M 33.4961,173.5914 h 2.0508 M 33.4961,157.0194 h 2.0508 M 33.4961,148.7334 h 2.0508 M 33.4961,140.4474 h 2.0508 M 33.4961,132.1615 h 2.0508 M 33.4961,123.8755 h 2.0508 M 33.4961,107.3035 h 2.0508 M 33.4961,99.0175 h 2.0508 M 33.4961,90.7315 h 2.0508 M 33.4961,82.4455 h 2.0508 M 33.4961,74.1596 h 2.0508 M 33.4961,57.5876 h 2.0508 M 33.4961,49.3016 h 2.0508 M 33.4961,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,264.7372 h 3.4180 M 32.1289,215.0213 h 3.4180 M 32.1289,165.3054 h 3.4180 M 32.1289,115.5895 h 3.4180 M 32.1289,65.8736 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,65.8736)" stroke="none" text-anchor="end">150.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,115.5895)" stroke="none" text-anchor="end">120.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,165.3054)" stroke="none" text-anchor="end">90.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,215.0213)" stroke="none" text-anchor="end">60.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,264.7372)" stroke="none" text-anchor="end">30.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -236.9792 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -220.4072 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -190.5777 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -157.4337 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -107.7178 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -74.5739 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -26.5152 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -6.6288 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Histogram_pdfDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,264.7372 h 273.4375 M 35.5469,215.0213 h 273.4375 M 35.5469,165.3054 h 273.4375 M 35.5469,115.5895 h 273.4375 M 35.5469,65.8736 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,306.1671 h 2.0508 M 308.9844,297.8812 h 2.0508 M 308.9844,289.5952 h 2.0508 M 308.9844,281.3092 h 2.0508 M 308.9844,273.0232 h 2.0508 M 308.9844,256.4512 h 2.0508 M 308.9844,248.1652 h 2.0508 M 308.9844,239.8793 h 2.0508 M 308.9844,231.5933 h 2.0508 M 308.9844,223.3073 h 2.0508 M 308.9844,206.7353 h 2.0508 M 308.9844,198.4493 h 2.0508 M 308.9844,190.1634 h 2.0508 M 308.9844,181.8774 h 2.0508 M 308.9844,173.5914 h 2.0508 M 308.9844,157.0194 h 2.0508 M 308.9844,148.7334 h 2.0508 M 308.9844,140.4474 h 2.0508 M 308.9844,132.1615 h 2.0508 M 308.9844,123.8755 h 2.0508 M 308.9844,107.3035 h 2.0508 M 308.9844,99.0175 h 2.0508 M 308.9844,90.7315 h 2.0508 M 308.9844,82.4455 h 2.0508 M 308.9844,74.1596 h 2.0508 M 308.9844,57.5876 h 2.0508 M 308.9844,49.3016 h 2.0508 M 308.9844,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,264.7372 h 3.4180 M 308.9844,215.0213 h 3.4180 M 308.9844,165.3054 h 3.4180 M 308.9844,115.5895 h 3.4180 M 308.9844,65.8736 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,306.1671 h 2.0508 M 33.4961,297.8812 h 2.0508 M 33.4961,289.5952 h 2.0508 M 33.4961,281.3092 h 2.0508 M 33.4961,273.0232 h 2.0508 M 33.4961,256.4512 h 2.0508 M 33.4961,248.1652 h 2.0508 M 33.4961,239.8793 h 2.0508 M 33.4961,231.5933 h 2.0508 M 33.4961,223.3073 h 2.0508 M 33.4961,206.7353 h 2.0508 M 33.4961,198.4493 h 2.0508 M 33.4961,190.1634 h 2.0508 M 33.4961,181.8774 h 2.0508 M 33.4961,173.5914 h 2.0508 M 33.4961,157.0194 h 2.0508 M 33.4961,148.7334 h 2.0508 M 33.4961,140.4474 h 2.0508 M 33.4961,132.1615 h 2.0508 M 33.4961,123.8755 h 2.0508 M 33.4961,107.3035 h 2.0508 M 33.4961,99.0175 h 2.0508 M 33.4961,90.7315 h 2.0508 M 33.4961,82.4455 h 2.0508 M 33.4961,74.1596 h 2.0508 M 33.4961,57.5876 h 2.0508 M 33.4961,49.3016 h 2.0508 M 33.4961,41.0156 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,264.7372 h 3.4180 M 32.1289,215.0213 h 3.4180 M 32.1289,165.3054 h 3.4180 M 32.1289,115.5895 h 3.4180 M 32.1289,65.8736 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,65.8736)" stroke="none" text-anchor="end">0.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,115.5895)" stroke="none" text-anchor="end">0.4</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,165.3054)" stroke="none" text-anchor="end">0.3</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,215.0213)" stroke="none" text-anchor="end">0.2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,264.7372)" stroke="none" text-anchor="end">0.1</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -41.4299 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -16.5720 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -82.8598 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -149.1477 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -99.4318 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -33.1439 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Histogram_probabilityDia.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,252.3082 h 273.4375 M 35.5469,190.1634 h 273.4375 M 35.5469,128.0185 h 273.4375 M 35.5469,65.8736 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,304.0956 h 2.0508 M 308.9844,293.7382 h 2.0508 M 308.9844,283.3807 h 2.0508 M 308.9844,273.0232 h 2.0508 M 308.9844,262.6657 h 2.0508 M 308.9844,241.9508 h 2.0508 M 308.9844,231.5933 h 2.0508 M 308.9844,221.2358 h 2.0508 M 308.9844,210.8783 h 2.0508 M 308.9844,200.5208 h 2.0508 M 308.9844,179.8059 h 2.0508 M 308.9844,169.4484 h 2.0508 M 308.9844,159.0909 h 2.0508 M 308.9844,148.7334 h 2.0508 M 308.9844,138.3759 h 2.0508 M 308.9844,117.6610 h 2.0508 M 308.9844,107.3035 h 2.0508 M 308.9844,96.9460 h 2.0508 M 308.9844,86.5885 h 2.0508 M 308.9844,76.2311 h 2.0508 M 308.9844,55.5161 h 2.0508 M 308.9844,45.1586 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,314.4531 h 3.4180 M 308.9844,252.3082 h 3.4180 M 308.9844,190.1634 h 3.4180 M 308.9844,128.0185 h 3.4180 M 308.9844,65.8736 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,304.0956 h 2.0508 M 33.4961,293.7382 h 2.0508 M 33.4961,283.3807 h 2.0508 M 33.4961,273.0232 h 2.0508 M 33.4961,262.6657 h 2.0508 M 33.4961,241.9508 h 2.0508 M 33.4961,231.5933 h 2.0508 M 33.4961,221.2358 h 2.0508 M 33.4961,210.8783 h 2.0508 M 33.4961,200.5208 h 2.0508 M 33.4961,179.8059 h 2.0508 M 33.4961,169.4484 h 2.0508 M 33.4961,159.0909 h 2.0508 M 33.4961,148.7334 h 2.0508 M 33.4961,138.3759 h 2.0508 M 33.4961,117.6610 h 2.0508 M 33.4961,107.3035 h 2.0508 M 33.4961,96.9460 h 2.0508 M 33.4961,86.5885 h 2.0508 M 33.4961,76.2311 h 2.0508 M 33.4961,55.5161 h 2.0508 M 33.4961,45.1586 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,314.4531 h 3.4180 M 32.1289,252.3082 h 3.4180 M 32.1289,190.1634 h 3.4180 M 32.1289,128.0185 h 3.4180 M 32.1289,65.8736 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,65.8736)" stroke="none" text-anchor="end">0.2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,128.0185)" stroke="none" text-anchor="end">0.15</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,190.1634)" stroke="none" text-anchor="end">0.1</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,252.3082)" stroke="none" text-anchor="end">5.0e-2</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,314.4531)" stroke="none" text-anchor="end">0.0</text></g><g stroke-width="0.8"><path d="M 52.6367,314.4531 v -273.4375 M 109.6029,314.4531 v -273.4375 M 166.5690,314.4531 v -273.4375 M 223.5352,314.4531 v -273.4375 M 280.5013,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 43.1424,41.0156 v -2.0508 M 62.1311,41.0156 v -2.0508 M 71.6254,41.0156 v -2.0508 M 81.1198,41.0156 v -2.0508 M 90.6141,41.0156 v -2.0508 M 100.1085,41.0156 v -2.0508 M 119.0972,41.0156 v -2.0508 M 128.5916,41.0156 v -2.0508 M 138.0859,41.0156 v -2.0508 M 147.5803,41.0156 v -2.0508 M 157.0747,41.0156 v -2.0508 M 176.0634,41.0156 v -2.0508 M 185.5577,41.0156 v -2.0508 M 195.0521,41.0156 v -2.0508 M 204.5464,41.0156 v -2.0508 M 214.0408,41.0156 v -2.0508 M 233.0295,41.0156 v -2.0508 M 242.5239,41.0156 v -2.0508 M 252.0182,41.0156 v -2.0508 M 261.5126,41.0156 v -2.0508 M 271.0069,41.0156 v -2.0508 M 289.9957,41.0156 v -2.0508 M 299.4900,41.0156 v -2.0508 M 308.9844,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,41.0156 v -3.4180 M 109.6029,41.0156 v -3.4180 M 166.5690,41.0156 v -3.4180 M 223.5352,41.0156 v -3.4180 M 280.5013,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 43.1424,316.5039 v -2.0508 M 62.1311,316.5039 v -2.0508 M 71.6254,316.5039 v -2.0508 M 81.1198,316.5039 v -2.0508 M 90.6141,316.5039 v -2.0508 M 100.1085,316.5039 v -2.0508 M 119.0972,316.5039 v -2.0508 M 128.5916,316.5039 v -2.0508 M 138.0859,316.5039 v -2.0508 M 147.5803,316.5039 v -2.0508 M 157.0747,316.5039 v -2.0508 M 176.0634,316.5039 v -2.0508 M 185.5577,316.5039 v -2.0508 M 195.0521,316.5039 v -2.0508 M 204.5464,316.5039 v -2.0508 M 214.0408,316.5039 v -2.0508 M 233.0295,316.5039 v -2.0508 M 242.5239,316.5039 v -2.0508 M 252.0182,316.5039 v -2.0508 M 261.5126,316.5039 v -2.0508 M 271.0069,316.5039 v -2.0508 M 289.9957,316.5039 v -2.0508 M 299.4900,316.5039 v -2.0508 M 308.9844,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 52.6367,317.8711 v -3.4180 M 109.6029,317.8711 v -3.4180 M 166.5690,317.8711 v -3.4180 M 223.5352,317.8711 v -3.4180 M 280.5013,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,280.5013,322.6562)" stroke="none" text-anchor="middle">8.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,223.5352,322.6562)" stroke="none" text-anchor="middle">7.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,166.5690,322.6562)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,109.6029,322.6562)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,52.6367,322.6562)" stroke="none" text-anchor="middle">4.0</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 263.4115,314.4531 h 22.7865 v -41.4299 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 240.6250,314.4531 h 22.7865 v -16.5720 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 217.8385,314.4531 h 22.7865 v -82.8598 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 195.0521,314.4531 h 22.7865 v -149.1477 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 172.2656,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 149.4792,314.4531 h 22.7865 v -248.5795 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 126.6927,314.4531 h 22.7865 v -165.7197 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 103.9062,314.4531 h 22.7865 v -240.2936 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 81.1198,314.4531 h 22.7865 v -99.4318 h -22.7865 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 58.3333,314.4531 h 22.7865 v -33.1439 h -22.7865 Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Pie_pieExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 350 350" font-size="1" width="349.9663" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(152,78,163)" stroke-width="1.0" fill="rgb(166,114,175)"><defs><clipPath id="myClip1"><path d="M 368.6462,368.6773 l -0.0000,-387.3181 h -387.3181 l -0.0000,387.3181 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 255.2145,175.0183 h 80.2274 c 0.0000,-62.8184 -36.6579,-119.8591 -93.7994 -145.9548l -33.3277,72.9774 c 28.5708,13.0478 46.8997,41.5682 46.8997 72.9774Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip2"><path d="M 368.6462,368.6773 l -0.0000,-387.3181 h -387.3181 l -0.0000,387.3181 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 208.3148,102.0409 l 33.3277,-72.9774 c -80.6086,-36.8127 -175.7974,-1.3091 -212.6101 79.2995c -29.5800,64.7712 -12.9346,141.2889 40.8793 187.9189l 52.5378,-60.6318 c -33.4860,-29.0158 -37.1099,-79.6835 -8.0940 -113.1696c 23.3150,-26.9069 61.5739,-35.2296 93.9595 -20.4396Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 368.6462,368.6773 l -0.0000,-387.3181 h -387.3181 l -0.0000,387.3181 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 122.4494,235.6501 l -52.5378,60.6318 c 66.9720,58.0316 168.3075,50.7840 226.3391 -16.1881c 5.0037,-5.7746 9.5885,-11.8992 13.7195 -18.3271l -67.4916,-43.3742 c -23.9549,37.2746 -73.5912,48.0723 -110.8658 24.1174c -3.2140,-2.0655 -6.2763,-4.3579 -9.1636 -6.8598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 368.6462,368.6773 l -0.0000,-387.3181 h -387.3181 l -0.0000,387.3181 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 242.4787,218.3925 l 67.4916,43.3742 c 16.6300,-25.8769 25.4716,-55.9885 25.4716 -86.7484l -80.2274,-0.0000 c -0.0000,15.3799 -4.4208,30.4358 -12.7358 43.3742Z"/></g></g></svg>
+ diagrams/src_Plots_Types_Pie_piePlotExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 447 350" font-size="1" width="447.2937" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(152,78,163)" stroke-width="1.0" fill="rgb(166,114,175)"><defs><clipPath id="myClip1"><path d="M 336.7327,367.0628 l -0.0000,-353.7954 h -353.7954 l -0.0000,353.7954 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 159.8350,190.1650 h 146.5676 c 0.0000,-80.9471 -65.6206,-146.5676 -146.5676 -146.5676c -33.2038,-0.0000 -65.4237,11.2742 -91.3834 31.9764Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip2"><path d="M 336.7327,367.0628 l -0.0000,-353.7954 h -353.7954 l -0.0000,353.7954 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 159.8350,190.1650 l -91.3834,-114.5912 c -34.8729,27.8102 -55.1842,69.9870 -55.1842 114.5912Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip3"><path d="M 336.7327,367.0628 l -0.0000,-353.7954 h -353.7954 l -0.0000,353.7954 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 159.8350,190.1650 l -146.5676,-0.0000 c -0.0000,80.9471 65.6206,146.5676 146.5676 146.5676c 10.9747,0.0000 21.9148,-1.2326 32.6144 -3.6748Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip4"><path d="M 336.7327,367.0628 l -0.0000,-353.7954 h -353.7954 l -0.0000,353.7954 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 159.8350,190.1650 l 32.6144,142.8929 c 66.6672,-15.2163 113.9533,-74.5112 113.9533 -142.8929Z"/></g></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 429.6040,84.0264 l -0.0000,-70.7591 h -75.1815 l -0.0000,70.7591 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,380.9571,75.1815)" stroke="none" text-anchor="start">purple</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(152,78,163)" stroke-width="1.0" fill="rgb(166,114,175)"><path d="M 369.9010,77.3927 l -0.0000,-4.4224 h -4.4224 l -0.0000,4.4224 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,380.9571,57.4918)" stroke="none" text-anchor="start">green</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><path d="M 369.9010,59.7030 l -0.0000,-4.4224 h -4.4224 l -0.0000,4.4224 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,380.9571,39.8020)" stroke="none" text-anchor="start">blue</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><path d="M 369.9010,42.0132 l -0.0000,-4.4224 h -4.4224 l -0.0000,4.4224 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,380.9571,22.1122)" stroke="none" text-anchor="start">red</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><path d="M 369.9010,24.3234 l -0.0000,-4.4224 h -4.4224 l -0.0000,4.4224 Z"/></g></svg>
+ diagrams/src_Plots_Types_Pie_wedgeExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 432 350" font-size="1" width="432.2347" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip1"><path d="M 337.0621,322.9309 l -0.0000,-304.5524 h -304.5524 l -0.0000,304.5524 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 184.7859,170.6547 h 126.2016 c 0.0000,-28.1585 -9.4173,-55.5082 -26.7534 -77.6974Z"/></g></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l 146.2111,42.5483 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l 43.1950,146.0214 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l -99.5344,115.2430 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l -150.7523,-21.4892 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l -63.3693,-138.4644 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 l 82.2752,-128.1360 "/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 h 152.2762 "/></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,352.9286,219.5853)" stroke="none" text-anchor="middle">6.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,234.4601,338.5793)" stroke="none" text-anchor="middle">5.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,70.3213,303.1842)" stroke="none" text-anchor="middle">4.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,11.4207,145.9421)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,111.9112,11.4207)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,279.4023,23.2983)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,359.9035,170.6547)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 333.7609,188.0921 l 4.5373,0.5311 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 319.8554,235.8761 l 4.1138,1.9864 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 307.1638,257.3799 l 3.7272,2.6414 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 291.0807,276.4802 l 3.2374,3.2231 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 272.0518,292.6477 l 2.6578,3.7155 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 250.6044,305.4343 l 2.0046,4.1050 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 202.8824,319.5511 l 0.5512,4.5349 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 177.9303,320.4900 l -0.2088,4.5635 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 153.1682,317.2765 l -0.9630,4.4656 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 129.2823,309.9995 l -1.6905,4.2440 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 106.9346,298.8608 l -2.3711,3.9048 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 69.2714,266.3315 l -3.5182,2.9140 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 54.9997,245.8423 l -3.9529,2.2900 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 44.3248,223.2694 l -4.2780,1.6025 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 37.5426,199.2384 l -4.4846,0.8706 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 34.8409,174.4152 l -4.5669,0.1145 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 41.8640,125.1471 l -4.3530,-1.3860 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 51.3939,102.0675 l -4.0627,-2.0890 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 64.6207,80.8887 l -3.6599,-2.7340 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 81.1776,62.1976 l -3.1556,-3.3033 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 100.6059,46.5122 l -2.5639,-3.7810 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 145.8582,25.8022 l -1.1856,-4.4118 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 170.4281,21.3514 l -0.4373,-4.5473 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 195.3959,21.0384 l 0.3231,-4.5568 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 220.0696,24.8718 l 1.0746,-4.4401 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 243.7655,32.7453 l 1.7963,-4.2003 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 285.6424,59.6341 l 3.0718,-3.3813 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 302.6627,77.9042 l 3.5902,-2.8249 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 316.4163,98.7447 l 4.0090,-2.1902 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 326.5219,121.5781 l 4.3168,-1.4947 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 332.6995,145.7716 l 4.5050,-0.7579 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 327.3417,212.1394 l 7.3106,2.1274 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 226.9010,313.0255 l 2.1598,7.3011 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 87.7399,283.0167 l -4.9767,5.7622 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 37.8024,149.7027 l -7.5376,-1.0745 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 123.0008,35.6520 l -3.1685,-6.9232 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 265.0042,45.7221 l 4.1138,-6.4068 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 333.2552,170.6547 h 7.6138 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 337.0621,170.6547 c 0.0000,-84.0998 -68.1764,-152.2762 -152.2762 -152.2762c -84.0998,-0.0000 -152.2762,68.1764 -152.2762 152.2762c -0.0000,84.0998 68.1764,152.2762 152.2762 152.2762c 84.0998,0.0000 152.2762,-68.1764 152.2762 -152.2762Z"/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 310.9874,170.6547 c 0.0000,-69.6992 -56.5024,-126.2016 -126.2016 -126.2016c -69.6992,-0.0000 -126.2016,56.5024 -126.2016 126.2016c -0.0000,69.6992 56.5024,126.2016 126.2016 126.2016c 69.6992,0.0000 126.2016,-56.5024 126.2016 -126.2016Z"/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 279.4370,170.6547 c 0.0000,-52.2744 -42.3768,-94.6512 -94.6512 -94.6512c -52.2744,-0.0000 -94.6512,42.3768 -94.6512 94.6512c -0.0000,52.2744 42.3768,94.6512 94.6512 94.6512c 52.2744,0.0000 94.6512,-42.3768 94.6512 -94.6512Z"/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 247.8866,170.6547 c 0.0000,-34.8496 -28.2512,-63.1008 -63.1008 -63.1008c -34.8496,-0.0000 -63.1008,28.2512 -63.1008 63.1008c -0.0000,34.8496 28.2512,63.1008 63.1008 63.1008c 34.8496,0.0000 63.1008,-28.2512 63.1008 -63.1008Z"/></g><g fill-opacity="0.0" stroke-width="0.8" fill="rgb(0,0,0)"><path d="M 216.3362,170.6547 c 0.0000,-17.4248 -14.1256,-31.5504 -31.5504 -31.5504c -17.4248,-0.0000 -31.5504,14.1256 -31.5504 31.5504c -0.0000,17.4248 14.1256,31.5504 31.5504 31.5504c 17.4248,0.0000 31.5504,-14.1256 31.5504 -31.5504Z"/></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,310.9874,193.4962)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,279.4370,193.4962)" stroke="none" text-anchor="middle">0.75</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,247.8866,193.4962)" stroke="none" text-anchor="middle">0.5</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,216.3362,193.4962)" stroke="none" text-anchor="middle">0.25</text></g><g fill-opacity="0.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,184.7859,193.4962)" stroke="none" text-anchor="middle">0.0</text></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 332.0210,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 326.7626,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 321.5042,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 316.2458,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 305.7290,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 300.4706,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 295.2122,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 289.9538,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 284.6954,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 274.1786,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 268.9202,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 263.6618,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 258.4034,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 253.1450,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 242.6282,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 237.3698,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 232.1114,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 226.8530,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 221.5946,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 211.0779,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 205.8195,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 200.5611,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 195.3027,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 190.0443,172.9389 v -4.5683 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 310.9874,174.4616 v -7.6138 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 279.4370,174.4616 v -7.6138 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 247.8866,174.4616 v -7.6138 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 216.3362,174.4616 v -7.6138 "/></g><g fill-opacity="0.0" stroke-width="0.4" fill="rgb(0,0,0)"><path d="M 184.7859,174.4616 v -7.6138 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 184.7859,170.6547 h 152.2762 "/></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 417.0071,33.6061 l -0.0000,-15.2276 h -64.7174 l -0.0000,15.2276 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,375.1311,25.9923)" stroke="none" text-anchor="start">wedge</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><path d="M 365.6139,27.8958 l -0.0000,-3.8069 h -3.8069 l -0.0000,3.8069 Z"/></g></svg>
+ diagrams/src_Plots_Types_Scatter_scatterExample'.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 340 350" font-size="1" width="339.7461" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,265.6250 h 273.4375 M 35.5469,200.5208 h 273.4375 M 35.5469,135.4167 h 273.4375 M 35.5469,70.3125 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,309.0278 h 2.0508 M 308.9844,298.1771 h 2.0508 M 308.9844,287.3264 h 2.0508 M 308.9844,276.4757 h 2.0508 M 308.9844,254.7743 h 2.0508 M 308.9844,243.9236 h 2.0508 M 308.9844,233.0729 h 2.0508 M 308.9844,222.2222 h 2.0508 M 308.9844,211.3715 h 2.0508 M 308.9844,189.6701 h 2.0508 M 308.9844,178.8194 h 2.0508 M 308.9844,167.9687 h 2.0508 M 308.9844,157.1181 h 2.0508 M 308.9844,146.2674 h 2.0508 M 308.9844,124.5660 h 2.0508 M 308.9844,113.7153 h 2.0508 M 308.9844,102.8646 h 2.0508 M 308.9844,92.0139 h 2.0508 M 308.9844,81.1632 h 2.0508 M 308.9844,59.4618 h 2.0508 M 308.9844,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,265.6250 h 3.4180 M 308.9844,200.5208 h 3.4180 M 308.9844,135.4167 h 3.4180 M 308.9844,70.3125 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,309.0278 h 2.0508 M 33.4961,298.1771 h 2.0508 M 33.4961,287.3264 h 2.0508 M 33.4961,276.4757 h 2.0508 M 33.4961,254.7743 h 2.0508 M 33.4961,243.9236 h 2.0508 M 33.4961,233.0729 h 2.0508 M 33.4961,222.2222 h 2.0508 M 33.4961,211.3715 h 2.0508 M 33.4961,189.6701 h 2.0508 M 33.4961,178.8194 h 2.0508 M 33.4961,167.9687 h 2.0508 M 33.4961,157.1181 h 2.0508 M 33.4961,146.2674 h 2.0508 M 33.4961,124.5660 h 2.0508 M 33.4961,113.7153 h 2.0508 M 33.4961,102.8646 h 2.0508 M 33.4961,92.0139 h 2.0508 M 33.4961,81.1632 h 2.0508 M 33.4961,59.4618 h 2.0508 M 33.4961,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,265.6250 h 3.4180 M 32.1289,200.5208 h 3.4180 M 32.1289,135.4167 h 3.4180 M 32.1289,70.3125 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3437,70.3125)" stroke="none" text-anchor="end">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3437,135.4167)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3437,200.5208)" stroke="none" text-anchor="end">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3437,265.6250)" stroke="none" text-anchor="end">3.0</text></g><g stroke-width="0.8"><path d="M 58.3333,314.4531 v -273.4375 M 96.3108,314.4531 v -273.4375 M 134.2882,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 210.2431,314.4531 v -273.4375 M 248.2205,314.4531 v -273.4375 M 286.1979,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 39.3446,41.0156 v -2.0508 M 45.6742,41.0156 v -2.0508 M 52.0038,41.0156 v -2.0508 M 64.6629,41.0156 v -2.0508 M 70.9925,41.0156 v -2.0508 M 77.3220,41.0156 v -2.0508 M 83.6516,41.0156 v -2.0508 M 89.9812,41.0156 v -2.0508 M 102.6403,41.0156 v -2.0508 M 108.9699,41.0156 v -2.0508 M 115.2995,41.0156 v -2.0508 M 121.6291,41.0156 v -2.0508 M 127.9586,41.0156 v -2.0508 M 140.6178,41.0156 v -2.0508 M 146.9473,41.0156 v -2.0508 M 153.2769,41.0156 v -2.0508 M 159.6065,41.0156 v -2.0508 M 165.9361,41.0156 v -2.0508 M 178.5952,41.0156 v -2.0508 M 184.9248,41.0156 v -2.0508 M 191.2543,41.0156 v -2.0508 M 197.5839,41.0156 v -2.0508 M 203.9135,41.0156 v -2.0508 M 216.5726,41.0156 v -2.0508 M 222.9022,41.0156 v -2.0508 M 229.2318,41.0156 v -2.0508 M 235.5613,41.0156 v -2.0508 M 241.8909,41.0156 v -2.0508 M 254.5501,41.0156 v -2.0508 M 260.8796,41.0156 v -2.0508 M 267.2092,41.0156 v -2.0508 M 273.5388,41.0156 v -2.0508 M 279.8683,41.0156 v -2.0508 M 292.5275,41.0156 v -2.0508 M 298.8571,41.0156 v -2.0508 M 305.1866,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 58.3333,41.0156 v -3.4180 M 96.3108,41.0156 v -3.4180 M 134.2882,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 210.2431,41.0156 v -3.4180 M 248.2205,41.0156 v -3.4180 M 286.1979,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 39.3446,316.5039 v -2.0508 M 45.6742,316.5039 v -2.0508 M 52.0038,316.5039 v -2.0508 M 64.6629,316.5039 v -2.0508 M 70.9925,316.5039 v -2.0508 M 77.3220,316.5039 v -2.0508 M 83.6516,316.5039 v -2.0508 M 89.9812,316.5039 v -2.0508 M 102.6403,316.5039 v -2.0508 M 108.9699,316.5039 v -2.0508 M 115.2995,316.5039 v -2.0508 M 121.6291,316.5039 v -2.0508 M 127.9586,316.5039 v -2.0508 M 140.6178,316.5039 v -2.0508 M 146.9473,316.5039 v -2.0508 M 153.2769,316.5039 v -2.0508 M 159.6065,316.5039 v -2.0508 M 165.9361,316.5039 v -2.0508 M 178.5952,316.5039 v -2.0508 M 184.9248,316.5039 v -2.0508 M 191.2543,316.5039 v -2.0508 M 197.5839,316.5039 v -2.0508 M 203.9135,316.5039 v -2.0508 M 216.5726,316.5039 v -2.0508 M 222.9022,316.5039 v -2.0508 M 229.2318,316.5039 v -2.0508 M 235.5613,316.5039 v -2.0508 M 241.8909,316.5039 v -2.0508 M 254.5501,316.5039 v -2.0508 M 260.8796,316.5039 v -2.0508 M 267.2092,316.5039 v -2.0508 M 273.5388,316.5039 v -2.0508 M 279.8683,316.5039 v -2.0508 M 292.5275,316.5039 v -2.0508 M 298.8571,316.5039 v -2.0508 M 305.1866,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 58.3333,317.8711 v -3.4180 M 96.3108,317.8711 v -3.4180 M 134.2882,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 210.2431,317.8711 v -3.4180 M 248.2205,317.8711 v -3.4180 M 286.1979,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,286.1979,322.6562)" stroke="none" text-anchor="middle">3.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,248.2205,322.6562)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,210.2431,322.6562)" stroke="none" text-anchor="middle">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,134.2882,322.6562)" stroke="none" text-anchor="middle">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,96.3108,322.6562)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,58.3333,322.6562)" stroke="none" text-anchor="middle">0.5</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 289.9577,138.6727 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 267.1712,294.9227 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 176.0254,132.1623 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 115.2615,288.4123 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 157.0367,67.5618 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 145.6434,74.0723 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 100.0705,106.6243 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 62.0931,269.3848 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 289.9577,63.8021 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 267.1712,70.3125 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip11"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip11)"><path d="M 176.0254,102.8646 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip12"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip12)"><path d="M 100.0705,265.6250 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g></svg>
+ diagrams/src_Plots_Types_Scatter_scatterExample.svg view
@@ -0,0 +1,1 @@+<svg xmlns="http://www.w3.org/2000/svg" height="350.0000" stroke-opacity="1" viewBox="0 0 412 350" font-size="1" width="411.5234" xmlns:xlink="http://www.w3.org/1999/xlink" stroke="rgb(0,0,0)" version="1.1"><defs></defs><g stroke-width="0.8"><path d="M 35.5469,265.6250 h 273.4375 M 35.5469,200.5208 h 273.4375 M 35.5469,135.4167 h 273.4375 M 35.5469,70.3125 h 273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 v -273.4375 M 308.9844,314.4531 v -273.4375 "/></g><g stroke-width="0.4"><path d="M 308.9844,309.0278 h 2.0508 M 308.9844,298.1771 h 2.0508 M 308.9844,287.3264 h 2.0508 M 308.9844,276.4757 h 2.0508 M 308.9844,254.7743 h 2.0508 M 308.9844,243.9236 h 2.0508 M 308.9844,233.0729 h 2.0508 M 308.9844,222.2222 h 2.0508 M 308.9844,211.3715 h 2.0508 M 308.9844,189.6701 h 2.0508 M 308.9844,178.8194 h 2.0508 M 308.9844,167.9687 h 2.0508 M 308.9844,157.1181 h 2.0508 M 308.9844,146.2674 h 2.0508 M 308.9844,124.5660 h 2.0508 M 308.9844,113.7153 h 2.0508 M 308.9844,102.8646 h 2.0508 M 308.9844,92.0139 h 2.0508 M 308.9844,81.1632 h 2.0508 M 308.9844,59.4618 h 2.0508 M 308.9844,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 308.9844,265.6250 h 3.4180 M 308.9844,200.5208 h 3.4180 M 308.9844,135.4167 h 3.4180 M 308.9844,70.3125 h 3.4180 "/></g><g stroke-width="0.4"><path d="M 33.4961,309.0278 h 2.0508 M 33.4961,298.1771 h 2.0508 M 33.4961,287.3264 h 2.0508 M 33.4961,276.4757 h 2.0508 M 33.4961,254.7743 h 2.0508 M 33.4961,243.9236 h 2.0508 M 33.4961,233.0729 h 2.0508 M 33.4961,222.2222 h 2.0508 M 33.4961,211.3715 h 2.0508 M 33.4961,189.6701 h 2.0508 M 33.4961,178.8194 h 2.0508 M 33.4961,167.9687 h 2.0508 M 33.4961,157.1181 h 2.0508 M 33.4961,146.2674 h 2.0508 M 33.4961,124.5660 h 2.0508 M 33.4961,113.7153 h 2.0508 M 33.4961,102.8646 h 2.0508 M 33.4961,92.0139 h 2.0508 M 33.4961,81.1632 h 2.0508 M 33.4961,59.4618 h 2.0508 M 33.4961,48.6111 h 2.0508 "/></g><g stroke-width="0.4"><path d="M 32.1289,265.6250 h 3.4180 M 32.1289,200.5208 h 3.4180 M 32.1289,135.4167 h 3.4180 M 32.1289,70.3125 h 3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,70.3125)" stroke="none" text-anchor="end">6.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,135.4167)" stroke="none" text-anchor="end">5.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,200.5208)" stroke="none" text-anchor="end">4.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,27.3438,265.6250)" stroke="none" text-anchor="end">3.0</text></g><g stroke-width="0.8"><path d="M 58.3333,314.4531 v -273.4375 M 96.3108,314.4531 v -273.4375 M 134.2882,314.4531 v -273.4375 M 172.2656,314.4531 v -273.4375 M 210.2431,314.4531 v -273.4375 M 248.2205,314.4531 v -273.4375 M 286.1979,314.4531 v -273.4375 "/></g><g stroke-linecap="square"><path d="M 35.5469,314.4531 h 273.4375 M 35.5469,41.0156 h 273.4375 "/></g><g stroke-width="0.4"><path d="M 39.3446,41.0156 v -2.0508 M 45.6742,41.0156 v -2.0508 M 52.0038,41.0156 v -2.0508 M 64.6629,41.0156 v -2.0508 M 70.9925,41.0156 v -2.0508 M 77.3220,41.0156 v -2.0508 M 83.6516,41.0156 v -2.0508 M 89.9812,41.0156 v -2.0508 M 102.6403,41.0156 v -2.0508 M 108.9699,41.0156 v -2.0508 M 115.2995,41.0156 v -2.0508 M 121.6291,41.0156 v -2.0508 M 127.9586,41.0156 v -2.0508 M 140.6178,41.0156 v -2.0508 M 146.9473,41.0156 v -2.0508 M 153.2769,41.0156 v -2.0508 M 159.6065,41.0156 v -2.0508 M 165.9361,41.0156 v -2.0508 M 178.5952,41.0156 v -2.0508 M 184.9248,41.0156 v -2.0508 M 191.2543,41.0156 v -2.0508 M 197.5839,41.0156 v -2.0508 M 203.9135,41.0156 v -2.0508 M 216.5726,41.0156 v -2.0508 M 222.9022,41.0156 v -2.0508 M 229.2318,41.0156 v -2.0508 M 235.5613,41.0156 v -2.0508 M 241.8909,41.0156 v -2.0508 M 254.5501,41.0156 v -2.0508 M 260.8796,41.0156 v -2.0508 M 267.2092,41.0156 v -2.0508 M 273.5388,41.0156 v -2.0508 M 279.8683,41.0156 v -2.0508 M 292.5275,41.0156 v -2.0508 M 298.8571,41.0156 v -2.0508 M 305.1866,41.0156 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 58.3333,41.0156 v -3.4180 M 96.3108,41.0156 v -3.4180 M 134.2882,41.0156 v -3.4180 M 172.2656,41.0156 v -3.4180 M 210.2431,41.0156 v -3.4180 M 248.2205,41.0156 v -3.4180 M 286.1979,41.0156 v -3.4180 "/></g><g stroke-width="0.4"><path d="M 39.3446,316.5039 v -2.0508 M 45.6742,316.5039 v -2.0508 M 52.0038,316.5039 v -2.0508 M 64.6629,316.5039 v -2.0508 M 70.9925,316.5039 v -2.0508 M 77.3220,316.5039 v -2.0508 M 83.6516,316.5039 v -2.0508 M 89.9812,316.5039 v -2.0508 M 102.6403,316.5039 v -2.0508 M 108.9699,316.5039 v -2.0508 M 115.2995,316.5039 v -2.0508 M 121.6291,316.5039 v -2.0508 M 127.9586,316.5039 v -2.0508 M 140.6178,316.5039 v -2.0508 M 146.9473,316.5039 v -2.0508 M 153.2769,316.5039 v -2.0508 M 159.6065,316.5039 v -2.0508 M 165.9361,316.5039 v -2.0508 M 178.5952,316.5039 v -2.0508 M 184.9248,316.5039 v -2.0508 M 191.2543,316.5039 v -2.0508 M 197.5839,316.5039 v -2.0508 M 203.9135,316.5039 v -2.0508 M 216.5726,316.5039 v -2.0508 M 222.9022,316.5039 v -2.0508 M 229.2318,316.5039 v -2.0508 M 235.5613,316.5039 v -2.0508 M 241.8909,316.5039 v -2.0508 M 254.5501,316.5039 v -2.0508 M 260.8796,316.5039 v -2.0508 M 267.2092,316.5039 v -2.0508 M 273.5388,316.5039 v -2.0508 M 279.8683,316.5039 v -2.0508 M 292.5275,316.5039 v -2.0508 M 298.8571,316.5039 v -2.0508 M 305.1866,316.5039 v -2.0508 "/></g><g stroke-width="0.4"><path d="M 58.3333,317.8711 v -3.4180 M 96.3108,317.8711 v -3.4180 M 134.2882,317.8711 v -3.4180 M 172.2656,317.8711 v -3.4180 M 210.2431,317.8711 v -3.4180 M 248.2205,317.8711 v -3.4180 M 286.1979,317.8711 v -3.4180 "/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,286.1979,322.6562)" stroke="none" text-anchor="middle">3.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,248.2205,322.6562)" stroke="none" text-anchor="middle">3.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,210.2431,322.6562)" stroke="none" text-anchor="middle">2.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,322.6562)" stroke="none" text-anchor="middle">2.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,134.2882,322.6562)" stroke="none" text-anchor="middle">1.5</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,96.3108,322.6562)" stroke="none" text-anchor="middle">1.0</text></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-before-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,58.3333,322.6562)" stroke="none" text-anchor="middle">0.5</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip1"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip1)"><path d="M 289.9577,138.6727 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip2"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip2)"><path d="M 267.1712,294.9227 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip3"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip3)"><path d="M 176.0254,132.1623 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><defs><clipPath id="myClip4"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip4)"><path d="M 115.2615,288.4123 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip5"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip5)"><path d="M 157.0367,67.5618 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip6"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip6)"><path d="M 145.6434,74.0723 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip7"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip7)"><path d="M 100.0705,106.6243 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><defs><clipPath id="myClip8"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip8)"><path d="M 62.0931,269.3848 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip9"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip9)"><path d="M 289.9577,63.8021 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip10"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip10)"><path d="M 267.1712,70.3125 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip11"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip11)"><path d="M 176.0254,102.8646 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><defs><clipPath id="myClip12"><path d="M 308.9844,314.4531 l -0.0000,-273.4375 h -273.4375 l -0.0000,273.4375 Z"/></clipPath></defs><g clip-path="url(#myClip12)"><path d="M 100.0705,265.6250 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="text-after-edge" transform="matrix(1.0000,0.0000,0.0000,1.0000,172.2656,27.3438)" stroke="none" text-anchor="middle"></text></g><g fill-opacity="0.0" fill="rgb(0,0,0)"><path d="M 380.7617,82.0312 l -0.0000,-41.0156 h -58.1055 l -0.0000,41.0156 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,343.1641,75.1953)" stroke="none" text-anchor="start">data 3</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(77,175,74)" stroke-width="1.0" fill="rgb(114,185,112)"><path d="M 336.6699,78.4514 l -3.7598,-6.5121 l -3.7598,6.5121 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,343.1641,61.5234)" stroke="none" text-anchor="start">data 2</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(55,126,184)" stroke-width="1.0" fill="rgb(103,146,193)"><path d="M 336.6699,65.2832 l -0.0000,-7.5195 h -7.5195 l -0.0000,7.5195 Z"/></g><g fill-opacity="1.0" font-size="11.0px" fill="rgb(0,0,0)"><text dominant-baseline="middle" transform="matrix(1.0000,0.0000,0.0000,1.0000,343.1641,47.8516)" stroke="none" text-anchor="start">data 1</text></g><g stroke-opacity="1.0" fill-opacity="1.0" stroke="rgb(228,26,28)" stroke-width="1.0" fill="rgb(231,93,93)"><path d="M 336.6699,47.8516 c 0.0000,-2.0765 -1.6833,-3.7598 -3.7598 -3.7598c -2.0765,-0.0000 -3.7598,1.6833 -3.7598 3.7598c -0.0000,2.0765 1.6833,3.7598 3.7598 3.7598c 2.0765,0.0000 3.7598,-1.6833 3.7598 -3.7598Z"/></g></svg>
+ plots.cabal view
@@ -0,0 +1,81 @@+name: plots+version: 0.1.0.0+synopsis: Diagrams based plotting library.+homepage: http://github.com/cchalmers/plots+license: BSD3+license-file: LICENSE+author: Christopher Chalmers+maintainer: c.chalmers@me.com+bug-reports: http://github.com/cchalmers/plots+stability: Experimental+category: Graphics+build-type: Simple+cabal-version: >=1.10+extra-source-files: README.md diagrams/*.svg+extra-doc-files: diagrams/*.svg+description: Diagrams based plotting library.++source-repository head+ type: git+ location: http://github.com/cchalmers/plots++library+ exposed-modules:+ Plots+ Plots.Axis+ Plots.Axis.ColourBar+ Plots.Axis.Grid+ Plots.Axis.Labels+ Plots.Axis.Line+ Plots.Axis.Render+ Plots.Axis.Ticks+ Plots.Axis.Title+ Plots.Axis.Scale+ Plots.Legend+ Plots.Name+ Plots.Style+ Plots.Types+ Plots.Types.Bar+ Plots.Types.Histogram+ Plots.Types.HeatMap+ Plots.Types.Line+ Plots.Types.Pie+ Plots.Types.Scatter+ Plots.Util+ Diagrams.Coordinates.Isomorphic+ Diagrams.Coordinates.Polar+ hs-source-dirs: src+ build-depends:+ base >= 4.3 && < 5.0,+ adjunctions,+ colour,+ containers >= 0.3 && < 0.6,+ data-default >= 0.5 && < 0.8,+ diagrams-core >= 1.3 && < 1.4,+ diagrams-lib >= 1.3 && < 1.4,+ directory,+ distributive,+ transformers,+ filepath,+ fingertree,+ hashable >= 1.1 && < 1.3,+ lens >= 4.6 && < 5.0,+ linear >= 1.2 && < 2.0,+ monoid-extras >= 0.3 && < 0.6,+ mtl >= 1.0 && < 3.2,+ optparse-applicative,+ statistics,+ process,+ semigroupoids,+ semigroups,+ split >= 0.1.2 && < 0.5,+ time,+ vector,+ profunctors,+ JuicyPixels,+ intervals,+ base-orphans++ ghc-options: -Wall++ default-language: Haskell2010
+ src/Diagrams/Coordinates/Isomorphic.hs view
@@ -0,0 +1,139 @@+{-# LANGUAGE ConstrainedClassMethods #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}+-----------------------------------------------------------------------------+-- |+-- Module : Diagrams.Coordinates.Isomorphic+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- This module defines a class for coordinates that are (loosely)+-- isomorphic to the standard spaces ('V2' and 'V3'). This allows plots+-- to accept more data types for plot data.+--+----------------------------------------------------------------------------+module Diagrams.Coordinates.Isomorphic+ ( -- * Type constraints+ HasIndexedBasis, Euclidean++ -- * Vector like+ , VectorLike (..)+ , V2Like, V3Like++ -- * Point like+ , PointLike (..)+ , P2Like, P3Like+ )+ where++import Control.Lens+import Data.Complex+import Data.Typeable++import Diagrams.Prelude++type HasIndexedBasis v = (HasBasis v, TraversableWithIndex (E v) v)++-- | Umbrella class giving everything needed for working in the space. This is+-- basically 'V2' or 'V3' from "linear".+type Euclidean v = (HasLinearMap v, HasIndexedBasis v, Metric v)++-- vector like ---------------------------------------------------------++-- | Provides an 'Iso'' between @a@ and @v n@. This is normally used to+-- convert between the data type you're already using, @a@, and diagram's+-- native form, @v n@.+class (Euclidean v, Typeable v) => VectorLike v n a | a -> v n where+ -- | Isomorphism from @Point v n@ to something 'PointLike' @a@.+ --+ -- >>> V2 3 5 ^. vectorLike :: (Int, Int)+ -- (3,5)+ vectorLike :: Iso' (v n) a++ -- | Isomorphism from something 'PointLike' @a@ to @Point v n@.+ --+ -- >>> ((3, 5) :: (Int, Int)) ^. unvectorLike+ -- V2 3 5+ unvectorLike :: Iso' a (v n)+ unvectorLike = from vectorLike+ {-# INLINE unvectorLike #-}++instance VectorLike V2 n (V2 n) where+ vectorLike = id+ {-# INLINE vectorLike #-}++type V2Like = VectorLike V2++instance n ~ m => VectorLike V2 n (n, m) where+ vectorLike = iso unr2 r2+ {-# INLINE vectorLike #-}++instance VectorLike V2 n (Complex n) where+ vectorLike = iso (\(V2 x y) -> x :+ y)+ (\(i :+ j) -> V2 i j)+ {-# INLINE vectorLike #-}++type V3Like = VectorLike V3++instance VectorLike V3 n (V3 n) where+ vectorLike = id+ {-# INLINE vectorLike #-}++instance (n ~ m, m ~ o) => VectorLike V3 n (n, m, o) where+ vectorLike = iso unr3 r3+ {-# INLINE vectorLike #-}++-- point like ----------------------------------------------------------++-- | Provides an 'Iso'' between @a@ and @'Point' v n@. This is normally used to+-- convert between the data type you're already using, @a@, and diagram's+-- native form, @'Point' v n@.+class (Euclidean v, Typeable v) => PointLike v n a | a -> v n where+ -- | Isomorphism from @'Point' v n@ to something 'PointLike' @a@.+ --+ -- >>> mkP2 3 5 ^. pointLike :: (Int, Int)+ -- (3,5)+ pointLike :: Iso' (Point v n) a++ -- | Isomorphism from something 'PointLike' @a@ to @Point v n@.+ --+ -- >>> ((3, 5) :: (Int, Int)) ^. unpointLike+ -- P (V2 3 5)+ unpointLike :: Iso' a (Point v n)+ unpointLike = from pointLike+ {-# INLINE unpointLike #-}++-- | Things that are isomorphic to points in R2.+type P2Like = PointLike V2++instance (Euclidean v, Typeable v) => PointLike v n (Point v n) where+ pointLike = id++instance PointLike V2 n (V2 n) where+ pointLike = _Point+ {-# INLINE pointLike #-}++instance n ~ m => PointLike V2 n (n, m) where+ pointLike = iso unp2 p2+ {-# INLINE pointLike #-}++instance PointLike V2 n (Complex n) where+ pointLike = iso (\(unp2 -> (x,y)) -> x :+ y)+ (\(i :+ j) -> p2 (i,j))+ {-# INLINE pointLike #-}++type P3Like = PointLike V3++instance (n ~ m, m ~ o) => PointLike V3 n (n, m, o) where+ pointLike = iso unp3 p3+ {-# INLINE pointLike #-}+
+ src/Diagrams/Coordinates/Polar.hs view
@@ -0,0 +1,171 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Diagrams.Coordinates.Spherical+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- This module defines a polar coordinate data type. This type can be+-- used as an axis space for polar plots.+--+----------------------------------------------------------------------------+module Diagrams.Coordinates.Polar+ ( -- * Polar type+ Polar (..)+ , mkPolar, polar, unpolar, polarIso, polarV2++ -- * Polar functions+ , interpPolar++ -- * Classes+ , Radial (..), Circle (..)+ , HasX (..), HasY (..), HasR (..)++ -- * Basis elements+ , er, eθ, etheta,++ ) where++import Control.Applicative+import qualified Data.Foldable as F++import Control.Lens+import Control.Monad.Fix+import Control.Monad.Zip+import Data.Distributive+import Data.Functor.Rep+import Data.Typeable+import GHC.Generics (Generic1)++import Diagrams.Angle+import Diagrams.TwoD.Types++import Linear.Affine+import Linear.Metric+import Linear.V3+import Linear.Vector++import Diagrams.Coordinates.Isomorphic+import Prelude+++newtype Polar a = Polar (V2 a)+ deriving (Monad, Functor, Typeable, MonadFix, Applicative, Traversable,+ Generic1, MonadZip, F.Foldable)++makeWrapped ''Polar++-- can't make reasonable Additive instance++instance Distributive Polar where+ distribute f = Polar $ V2 (fmap (\(Polar (V2 x _)) -> x) f)+ (fmap (\(Polar (V2 _ y)) -> y) f)++instance Representable Polar where+ type Rep Polar = E Polar+ tabulate f = Polar $ V2 (f er) (f eθ)+ index xs (E l) = view l xs++instance Circle Polar where+ _azimuth = polarWrapper . _y . from rad+ _polar = id++instance HasR Polar where+ _r = polarWrapper . _x++-- | Construct a 'Polar' from a magnitude and an 'Angle'.+mkPolar :: n -> Angle n -> Polar n+mkPolar r θ = Polar $ V2 r (θ^.rad)++-- | Construct a 'Polar' from a magnitude and 'Angle' tuple.+polar :: (n, Angle n) -> Polar n+polar = uncurry mkPolar++-- | Turn a 'Polar' back into a magnitude and 'Angle' tuple.+unpolar :: Polar n -> (n, Angle n)+unpolar (Polar (V2 r θ)) = (r, θ @@ rad)++-- | 'Iso'' between 'Polar' and its tuple form.+polarIso :: Iso' (Polar n) (n, Angle n)+polarIso = iso unpolar polar++-- | Numerical 'Iso'' between 'Polar' and 'R2'.+polarV2 :: RealFloat n => Iso' (Polar n) (V2 n)+polarV2 = iso (\(Polar (V2 r θ)) -> V2 (r * cos θ) (r * sin θ))+ (\v@(V2 x y) -> Polar $ V2 (norm v) (atan2 y x))++-- internal iso for instances+polarWrapper :: Iso' (Polar a) (V2 a)+polarWrapper = iso (\(Polar v) -> v) Polar++-- | Polar interpolation between two polar coordinates.+interpPolar :: Num n => n -> Polar n -> Polar n -> Polar n+interpPolar t (Polar a) (Polar b) = Polar (lerp t a b)+++-- | Space which has a radial length basis. For Polar and Cylindrical this is+-- the radius of the circle in the xy-plane. For Spherical this is the+-- distance from the origin.+class Radial t where+ _radial :: Lens' (t a) a++instance Radial Polar where+ _radial = polarWrapper . _x++-- | Space which has a radial and angular basis.+class Radial t => Circle t where+ _azimuth :: Lens' (t a) (Angle a)+ _polar :: Lens' (t a) (Polar a)++er :: Radial v => E v+er = E _radial++eθ, etheta :: Circle v => E v+eθ = E (_polar . polarWrapper . _y)+etheta = eθ++-- | Coordinate with at least one dimension where the x coordinate can be+-- retreived numerically. Note this differs slightly from 'R1' which requires+-- a lens for all values. This allows instances for different coordinates+-- such as 'Polar', where the x coordinate can only be retreived numerically.+class HasX t where+ x_ :: RealFloat n => Lens' (t n) n++instance HasX v => HasX (Point v) where+ x_ = _Point . x_++instance HasX V2 where x_ = _x+instance HasX V3 where x_ = _x+instance HasX Polar where x_ = polarV2 . _x++-- | Coordinate with at least two dimensions where the x and y coordinates can be+-- retreived numerically.+class HasX t => HasY t where+ y_ :: RealFloat n => Lens' (t n) n+ y_ = xy_ . _y++ xy_ :: RealFloat n => Lens' (t n) (V2 n)++instance HasY v => HasY (Point v) where+ xy_ = lensP . xy_++instance HasY V2 where xy_ = id+instance HasY V3 where xy_ = _xy+instance HasY Polar where xy_ = polarV2++-- | Does not satify lens laws.+instance RealFloat n => PointLike V2 n (Polar n) where+ pointLike = _Point . from polarV2+ {-# INLINE pointLike #-}+
+ src/Plots.hs view
@@ -0,0 +1,119 @@+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- This module defines types for axis labels and tick labels.+--+----------------------------------------------------------------------------+module Plots+ (++ -- | Axis definition (r2Axis and polarAxis), aspect ratio and scaling.+ module Plots.Axis++ -- | 'AxisStyle's are used to provide default colours and shapes+ -- for the plots of an axis.+ , module Plots.Style++ --------------------------------------------------------------------+ -- * Plot Types+ --------------------------------------------------------------------++ -- ** Scatter plot+ -- | Scatter plots display data as a collection of points. A scatter+ -- plot can also be configured to have a different style /+ -- transform depending on the data.++ -- | Scatter and bubble. Scatter and bubble plot api.+ , module Plots.Types.Scatter++ -- | Bar plots, individual or grouped.+ , module Plots.Types.Bar++ -- ** Line plot++ -- | Line, trail and path. Line plot, steps plot api & api for trail+ -- and path.+ , module Plots.Types.Line++ -- ** Heat map plot++ -- | 2D mapping from 'Double's to colours.+ , module Plots.Types.HeatMap++ -- ** Histogram plot++ -- | Histogram. API for histogram.+ , module Plots.Types.Histogram++ -- | Wedge and annular wedge. API for wedge, annular wegde and pie.+ , module Plots.Types.Pie++ --------------------------------------------------------------------+ -- * Low level+ --------------------------------------------------------------------++ -- | Definitions of bounds, axis scale, orientation, legend, generic+ -- plot ,plot spec and so on.+ , module Plots.Types++ -- | Grid lines and styles.+ , module Plots.Legend++ -- | Grid lines and styles.+ , module Plots.Axis.Grid++ -- | Axis labels and tick labels .+ , module Plots.Axis.Labels++ -- | Rendering system for polar and r2 axis.+ , module Plots.Axis.Render++ -- | The scaling/size options for an axis.+ , module Plots.Axis.Scale++ -- | Ticks properties and placement.+ , module Plots.Axis.Ticks++ -- | The plot title.+ , module Plots.Axis.Title++ -- | Colour bars.+ , module Plots.Axis.ColourBar++ -- | Polar coordinates+ , module Diagrams.Coordinates.Polar++ , (&=), (&~~)++ ) where++import Diagrams.Coordinates.Polar++import Plots.Axis+import Plots.Axis.ColourBar+import Plots.Axis.Grid+import Plots.Axis.Labels+import Plots.Axis.Render+import Plots.Axis.Scale+import Plots.Axis.Title+import Plots.Axis.Ticks++import Plots.Legend+import Plots.Style+import Plots.Types+import Plots.Util++import Plots.Types.Bar+import Plots.Types.HeatMap+import Plots.Types.Histogram+import Plots.Types.Line+import Plots.Types.Pie+import Plots.Types.Scatter+
+ src/Plots/Axis.hs view
@@ -0,0 +1,541 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- The 'Axis' is the main data type for "plots". It holds all the+-- nessesary infomation to be rendered into a 'Diagram'.+--+----------------------------------------------------------------------------+module Plots.Axis+ ( -- * Axis type+ Axis+ , axes+ , axisPlots+ , currentPlots+ , finalPlots+ , plotModifier+ , axisSize+ , colourBarRange++ -- * Predefined axes+ , r2Axis+ , polarAxis++ -- ** Base space+ , BaseSpace++ -- * Axis plots+ , addPlot+ , addPlotable+ , addPlotable'++ -- * Single axis+ , SingleAxis++ -- * Specific axes+ -- ** x-axis+ , xAxis+ , xLabel+ , xMin+ , xMax++ -- ** y-axis+ , yAxis+ , yLabel+ , yMin+ , yMax++ -- ** r-axis+ , rAxis+ , rLabel+ , rMax++ -- ** theta-axis+ , thetaAxis+ , thetaLabel++ -- ** z-axis+ , zAxis+ , zLabel+ , zMin+ , zMax+ ) where++import Control.Monad.State+import Data.Complex+import Data.Default+import Data.Typeable++import Diagrams.Coordinates.Polar+import Diagrams.Prelude+import Diagrams.TwoD.Text++import Plots.Axis.ColourBar+import Plots.Axis.Grid+import Plots.Axis.Labels+import Plots.Axis.Line+import Plots.Axis.Scale+import Plots.Axis.Title+import Plots.Axis.Ticks+import Plots.Legend+import Plots.Style+import Plots.Types++import Linear++------------------------------------------------------------------------+-- Axis data type+------------------------------------------------------------------------++-- Single axis ---------------------------------------------------------++-- | Render infomation for a single axis line.+data SingleAxis b v n = SingleAxis+-- note the the v is only present for Style v n+ { saLabel :: AxisLabel b v n+ , saLine :: AxisLine v n+ , saTickLabel :: TickLabels b v n+ , saScaling :: AxisScaling n+ , saGridLines :: GridLines v n+ , saTicks :: Ticks v n+ , saVisible :: Bool+ }++type instance V (SingleAxis b v n) = v+type instance N (SingleAxis b v n) = n++instance (TypeableFloat n, Renderable (Text n) b)+ => Default (SingleAxis b V2 n) where+ def = SingleAxis+ { saLabel = def+ , saLine = def+ , saTickLabel = def+ , saGridLines = def+ , saTicks = def+ , saScaling = def+ , saVisible = True+ }++instance Functor f => HasTicks f (SingleAxis b v n) where+ bothTicks = lens saTicks (\sa ticks -> sa {saTicks = ticks})++instance Functor f => HasMajorTicks f (SingleAxis b v n) where+ majorTicks = bothTicks . majorTicks++instance Functor f => HasMinorTicks f (SingleAxis b v n) where+ minorTicks = bothTicks . minorTicks++instance Functor f => HasAxisLabel f (SingleAxis b v n) b where+ axisLabel = lens saLabel (\sa l -> sa {saLabel = l})++instance Functor f => HasTickLabels f (SingleAxis b v n) b where+ tickLabel = lens saTickLabel (\sa tl -> sa {saTickLabel = tl})++instance Functor f => HasAxisLine f (SingleAxis b v n) where+ axisLine = lens saLine (\sa l -> sa {saLine = l})++instance Functor f => HasGridLines f (SingleAxis b v n) where+ gridLines = lens saGridLines (\sa l -> sa {saGridLines = l})++instance Functor f => HasMajorGridLines f (SingleAxis b v n) where+ majorGridLines = gridLines . majorGridLines++instance Functor f => HasMinorGridLines f (SingleAxis b v n) where+ minorGridLines = gridLines . minorGridLines++instance Functor f => HasAxisScaling f (SingleAxis b v n) where+ axisScaling = lens saScaling (\sa s -> sa {saScaling = s})++instance HasVisibility (SingleAxis b v n) where+ visible = lens saVisible (\sa b -> sa {saVisible = b})++-- singleAxisScale :: Lens' (SingleAxis b v n) AxisScale+-- singleAxisScale = lens saScale (\sa s -> sa {saScale = s})++-- singleAxisBound :: Lens' (SingleAxis b v n) (Bound n)+-- singleAxisBound = lens saBounds (\sa b -> sa {saBounds = b})++------------------------------------------------------------------------+-- Axis type+------------------------------------------------------------------------++-- Base space ----------------------------------------------------------++-- | This family is used so that we can say (Axis Polar) but use V2 for the+-- underlying diagram.+type family BaseSpace (c :: * -> *) :: * -> *++type instance BaseSpace V2 = V2+type instance BaseSpace Complex = V2+type instance BaseSpace Polar = V2+type instance BaseSpace V3 = V3++-- Axis data type ------------------------------------------------------++-- | Axis is the data type that holds all the nessessary information to render+-- a plot. Common 'LensLike's used for the axis (see haddock's+-- instances for a more comprehensive list):+--+-- * 'axisStyle' - customise the 'AxisStyle'+-- * 'legend' - customise the 'Legend'+-- * 'colourBar' - customise the 'ColourBar'+-- * 'currentPlots' - current plots in the 'Axis'+-- * 'finalPlots' - changes to the plots just before rendering+-- * 'axes' - changes to each 'SingleAxis'+--+-- * 'xAxis' - the x-axis+-- * 'yAxis' - the y-axis+-- * 'zAxis' - the z-axis+--+-- The following 'LensLike's can be used on the on all the axes by+-- applying it the to 'Axis' or can be used on a 'SingleAxis' by using+-- it in combination with a specific axis (like 'xAxis').+--+-- * 'axisLabel' - customise the 'MinorTicks'+-- * 'tickLabel' - customise the 'TickLabels'+-- * 'minorTicks' - customise the 'MinorTicks'+-- * 'majorTicks' - customise the 'MajorTicks'+-- * 'gridLines' - customise the 'GridLines'+-- * 'axisLine' - customise the 'AxisLine'+-- * 'axisScaling' - customise the 'AxisScaling'+--+-- Plots are usually added to the axis using specific functions for+-- that plots ('Plots.Types.Line.linePlot, 'Plots.Types.Bar.barPlot').+-- These functions use 'addPlotable' to add the plot to the axis.+data Axis b c n = Axis+ { _axisStyle :: AxisStyle b (BaseSpace c) n+ , _colourBar :: ColourBar b n+ , _colourBarR :: (n,n)+ , _legend :: Legend b n+ , _axisTitle :: Title b (BaseSpace c) n+ -- , _axisTitle :: AxisTitle++ , _axisPlots :: [DynamicPlot b (BaseSpace c) n]+ , _plotModifier :: Endo (StyledPlot b (BaseSpace c) n)++ -- the v in each axis is only used for the style+ , _axes :: c (SingleAxis b (BaseSpace c) n)+ } deriving Typeable++-- | Lens onto the separate axes of an axis. Allows changing the+-- coordinate system as long as the 'BaseSpace' is the same.+--+-- @+-- 'axes' :: 'Lens'' ('Axis' b c n) (c ('SingleAxis' b v n))+-- @+axes :: (v ~ BaseSpace c, v ~ BaseSpace c')+ => Lens (Axis b c n)+ (Axis b c' n)+ (c (SingleAxis b v n))+ (c' (SingleAxis b v n))+axes = lens _axes (\(Axis a1 a2 a3 a4 a5 a6 a7 _) a8 -> Axis a1 a2 a3 a4 a5 a6 a7 a8)++-- | The list of plots currently in the axis.+axisPlots :: BaseSpace c ~ v => Lens' (Axis b c n) [DynamicPlot b v n]+axisPlots = lens _axisPlots (\a ps -> a {_axisPlots = ps})++-- | Traversal over the current plots in the axis.+--+-- For example, to make all 'ScatterPlot's currently in the axis use a+-- 'connectingLine', you can write+--+-- @+-- 'finalPlots' . 'connectingLine' .= 'True'+-- @+currentPlots :: BaseSpace c ~ v => Traversal' (Axis b c n) (DynamicPlot b v n)+currentPlots = axisPlots . traversed++-- | Setter over the final plot before the axis is rendered.+--+-- For example, to make all 'ScatterPlot's in the axis use a+-- 'connectingLine' (both currently in the axis and ones added later),+-- you can add+--+-- @+-- 'finalPlots' . 'connectingLine' .= 'True'+-- @+--+finalPlots :: BaseSpace c ~ v => Setter' (Axis b c n) (StyledPlot b v n)+finalPlots = sets $ \f a -> a {_plotModifier = _plotModifier a <> Endo f}++-- | Lens onto the modifier set by 'finalPlots'. This gets applied to+-- all plots in the axis, just before they are rendered.+plotModifier :: BaseSpace c ~ v => Lens' (Axis b c n) (Endo (StyledPlot b v n))+plotModifier = lens _plotModifier (\a f -> a {_plotModifier = f})++-- Axis instances ------------------------------------------------------++type instance V (Axis b v n) = BaseSpace v+type instance N (Axis b v n) = n++instance (Applicative f, Traversable c) => HasTicks f (Axis b c n) where+ bothTicks = axes . traverse . bothTicks++instance (Applicative f, Traversable c) => HasMajorTicks f (Axis b c n) where+ majorTicks = axes . traverse . majorTicks++instance (Applicative f, Traversable c) => HasMinorTicks f (Axis b c n) where+ minorTicks = axes . traverse . minorTicks++instance (Applicative f, Traversable c) => HasGridLines f (Axis b c n) where+ gridLines = axes . traverse . gridLines++instance (Applicative f, Traversable c) => HasMajorGridLines f (Axis b c n) where+ majorGridLines = axes . traverse . majorGridLines++instance (Applicative f, Traversable c) => HasMinorGridLines f (Axis b c n) where+ minorGridLines = axes . traverse . minorGridLines++instance (Applicative f, Traversable c) => HasAxisLabel f (Axis b c n) b where+ axisLabel = axes . traverse . axisLabel++instance (Applicative f, Traversable c) => HasTickLabels f (Axis b c n) b where+ tickLabel = axes . traverse . tickLabel++instance (Applicative f, Traversable c) => HasAxisScaling f (Axis b c n) where+ axisScaling = axes . traverse . axisScaling++instance Settable f => HasPlotOptions f (Axis b c n) b where+ plotOptions = finalPlots . plotOptions++instance Settable f => HasPlotStyle f (Axis b c n) b where+ plotStyle = finalPlots . plotStyle++instance HasLegend (Axis b c n) b where+ legend = lens _legend (\a l -> a {_legend = l})++instance HasTitle (Axis b c n) b where+ title = lens _axisTitle (\a t -> a {_axisTitle = t})++-- | The size used for the rendered axis.+axisSize :: (HasLinearMap c, Num n, Ord n) => Lens' (Axis b c n) (SizeSpec c n)+axisSize = axes . column renderSize . iso mkSizeSpec getSpec -- column axisScaling . asSizeSpec -- iso mkSizeSpec getSpec++-- | The range used for the colour bar limits. This is automaticlaly set+-- when using 'heatMap' or 'heatMap''+colourBarRange :: Lens' (Axis b v n) (n,n)+colourBarRange = lens _colourBarR (\a r -> a {_colourBarR = r})++instance HasAxisStyle (Axis b v n) b where+ axisStyle = lens _axisStyle (\a sty -> a {_axisStyle = sty})++instance HasColourBar (Axis b v n) b where+ colourBar = lens _colourBar (\a cb -> a {_colourBar = cb})++-- Axis functions ------------------------------------------------------++-- $plotable+-- The 'Plotable' class defines ways of converting the data type to a+-- diagram for some axis. There are several variants for adding an axis+-- with constraints @('InSpace' v n a, 'Plotable' a b)@:+--+-- @+-- 'addPlotable' :: a -> 'PlotState' a b -> 'AxisState' b v n+-- 'addPlotable'' :: a -> 'AxisState' b v n+-- @+--+-- The last argument is a 'PlotState' so you can use @do@ notation to+-- make adjustments to the plot. The @L@ suffix stands for \"legend\",+-- it is equivalent of using 'addLegendEntry' in the 'PlotState'. Since+-- legend entries are so common it has it's own suffix. The following+-- are equivalent:+--+-- @+-- myaxis = 'r2Axis' &~ do+-- 'addPlotable'' myplot $ do+-- 'addLegendEntry' "my plot"+-- @+--+-- Most of the time you won't use these functions directly. However,+-- other plotting functions follow this naming convention where instead+-- of @a@, it takes the data needed to make the plot.++-- | Add a 'Plotable' 'Plot' to an 'Axis'.+addPlot+ :: (InSpace (BaseSpace c) n p, MonadState (Axis b c n) m, Plotable p b)+ => Plot p b -- ^ the plot+ -> m () -- ^ add plot to the 'Axis'+addPlot p = axisPlots <>= [DynamicPlot p]++-- | Add something 'Plotable' to the 'Axis' with a statefull modification+-- of the 'Plot'.+addPlotable+ :: (InSpace (BaseSpace c) n p, MonadState (Axis b c n) m, Plotable p b)+ => p -- ^ the raw plot+ -> State (Plot p b) () -- ^ changes to the plot+ -> m () -- ^ add plot to the 'Axis'+addPlotable p s = addPlot $ execState s (mkPlot p)++-- | Simple version of 'AddPlotable' without any changes 'Plot'.+addPlotable'+ :: (InSpace (BaseSpace v) n p, MonadState (Axis b v n) m, Plotable p b)+ => p -- ^ the raw plot+ -> m () -- ^ add plot to the 'Axis'+addPlotable' p = addPlotable p (return ())++------------------------------------------------------------------------+-- Predefined axes+------------------------------------------------------------------------++-- | The default axis for plots in the 'V2' coordinate system.+r2Axis+ :: (TypeableFloat n,+ Renderable (Text n) b,+ Renderable (Path V2 n) b)+ => Axis b V2 n+r2Axis = Axis+ { _axisStyle = fadedColours+ , _colourBar = defColourBar+ , _colourBarR = (0,1)+ , _axisTitle = def++ , _legend = def+ , _axisPlots = []+ , _plotModifier = mempty++ , _axes = pure def+ }++-- The x-axis ----------------------------------------------------------++-- | Lens onto the x-axis of an 'Axis'.+xAxis :: R1 c => Lens' (Axis b c n) (SingleAxis b (BaseSpace c) n)+xAxis = axes . _x++-- | The label for the x-axis. Shorthand for @'xAxis' . 'axisLabelText'@.+xLabel :: R1 c => Lens' (Axis b c n) String+xLabel = xAxis . axisLabelText++-- | The minimum x value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+xMin :: R1 c => Lens' (Axis b c n) (Maybe n)+xMin = xAxis . boundMin++-- | The minimum x value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+xMax :: R1 c => Lens' (Axis b c n) (Maybe n)+xMax = xAxis . boundMax++-- The y-axis ----------------------------------------------------------++-- | Lens onto the y-axis of an 'Axis'.+yAxis :: R2 c => Lens' (Axis b c n) (SingleAxis b (BaseSpace c) n)+yAxis = axes . _y++-- | The label for the y-axis. Shorthand for @'yAxis' . 'axisLabelText'@.+yLabel :: R2 c => Lens' (Axis b c n) String+yLabel = yAxis . axisLabelText++-- | The minimum y value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+yMin :: R2 c => Lens' (Axis b c n) (Maybe n)+yMin = yAxis . boundMin++-- | The minimum y value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+yMax :: R2 c => Lens' (Axis b c n) (Maybe n)+yMax = yAxis . boundMax++-- The z-axis ----------------------------------------------------------++-- | Lens onto the z-axis of an 'Axis'.+zAxis :: R3 c => Lens' (Axis b c n) (SingleAxis b (BaseSpace c) n)+zAxis = axes . _z++-- | The label for the z-axis. Shorthand for @'zAxis' . 'axisLabelText'@.+zLabel :: R3 c => Lens' (Axis b c n) String+zLabel = zAxis . axisLabelText++-- | The minimum z value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+zMin :: R3 c => Lens' (Axis b c n) (Maybe n)+zMin = zAxis . boundMin++-- | The minimum z value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+zMax :: R3 c => Lens' (Axis b c n) (Maybe n)+zMax = zAxis . boundMax++-- The r-axis ----------------------------------------------------------++-- | Lens onto the radial axis of an 'Axis'.+rAxis :: Radial c => Lens' (Axis b c n) (SingleAxis b (BaseSpace c) n)+rAxis = axes . _radial++-- | The label for the radial axis. Shorthand for @'rAxis' . 'axisLabelText'@.+rLabel :: Radial c => Lens' (Axis b c n) String+rLabel = rAxis . axisLabelText++-- | The minimum z value for the axis. If the value if 'Nothing' (the+-- 'Default'), the bounds will be infered by the plots in the axis.+-- rMin :: R3 c => Lens' (Axis b c n) (Maybe n)+-- rMin = zAxis . boundMin++-- | The minimum radial value for the axis. If the value if 'Nothing'+-- (the 'Default'), the bounds will be infered by the plots in the+-- axis.+rMax :: Radial c => Lens' (Axis b c n) (Maybe n)+rMax = rAxis . boundMax++-- The theta-axis ------------------------------------------------------++-- | Lens onto the radial axis of an 'Axis'.+thetaAxis :: Circle c => Lens' (Axis b c n) (SingleAxis b (BaseSpace c) n)+thetaAxis = axes . el etheta++-- | The label for the radial axis. Shorthand for @'rAxis' . 'axisLabelText'@.+thetaLabel :: Circle c => Lens' (Axis b c n) String+thetaLabel = thetaAxis . axisLabelText+++-- R3 Axis++-- instance (TypeableFloat n, Enum n, Renderable (Text n) b, Renderable (Path V2 n) b)+-- => Default (Axis b V3 n) where+-- def = Axis+-- { _axisTitle = Nothing+-- , _axisSize = mkWidth 300+-- , _axisPlots = []+-- , _axisLegend = def+-- , _axisTheme = coolTheme+-- , _axisLinearMap = isometricProjection+-- , _axisAxisBounds = Bounds $ pure def+-- , _axisGridLines = pure def+-- , _axisLabels = pure def+-- , _axisScaling = pure def+-- , _axisTickLabels = pure def+-- , _axisTicks = pure def+-- , _axisLines = pure def+-- }++-- R3 Axis++polarAxis+ :: (TypeableFloat n,+ Renderable (Text n) b,+ Renderable (Path V2 n) b)+ => Axis b Polar n+polarAxis = Axis+ { _axisStyle = fadedColours+ , _colourBar = defColourBar+ , _colourBarR = (0,1)+ , _axisTitle = def++ , _legend = def+ , _axisPlots = []+ , _plotModifier = mempty++ , _axes = pure def+ }+
+ src/Plots/Axis/ColourBar.hs view
@@ -0,0 +1,347 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.ColourBar+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Options for rendering a colour bar, either attached to an axis or+-- rendered separately.+--+-- To change the colour map used for the colour bar see+-- 'Plots.Style.axisColourMap' from "Plots.Style".+--+----------------------------------------------------------------------------+module Plots.Axis.ColourBar+ ( -- * The colour bar+ ColourBar+ , HasColourBar (..)+ , defColourBar++ -- ** Rendering options+ , gradientColourBar+ , pathColourBar++ -- * Rendering colour bars+ , renderColourBar+ , addColourBar+ ) where++import Data.Bool (bool)+import Data.Typeable+import Diagrams.Core.Transform (fromSymmetric)+import Diagrams.Prelude hiding (gap)+import Diagrams.TwoD.Text+import Plots.Axis.Grid+import Plots.Axis.Labels+import Plots.Axis.Ticks+import Plots.Style+import Plots.Types+import Plots.Util++-- | Options for drawing a colour bar. Note that for an axis, the+-- 'ColourMap' is stored in the 'AxisStyle'. These options are for+-- other aspects of the bar, not the colours used.+data ColourBar b n = ColourBar+ { cbPlacement :: Placement+ , cbVisible :: Bool+ , cbTicks :: MajorTicks V2 n+ , cbGridLines :: MajorGridLines V2 n+ , cbTickLabels :: TickLabels b V2 n+ , cbDraw :: ColourMap -> QDiagram b V2 n Any+ , cbWidth :: n+ , cbLengthFun :: n -> n+ , cbGap :: n+ , cbStyle :: Style V2 n+ }++type instance V (ColourBar b n) = V2+type instance N (ColourBar b n) = n++-- | The default colour bar.+defColourBar :: (Renderable (Text n) b, Renderable (Path V2 n) b, TypeableFloat n)+ => ColourBar b n+defColourBar = ColourBar+ { cbPlacement = rightMid+ , cbVisible = False+ , cbTicks = def+ , cbGridLines = def+ , cbTickLabels = def+ , cbDraw = gradientColourBar+ , cbWidth = 20+ , cbLengthFun = id+ , cbGap = 20+ , cbStyle = mempty+ }++class HasColourBar a b | a -> b where+ -- | Lens onto the 'ColourBar'.+ colourBar :: Lens' a (ColourBar b (N a))++ -- | How to draw the colour bar. Expects a 1 by 1 box with the+ -- gradient going from left to right, without an outline with origin+ -- in the middle of the left side. See 'gradientColourBar' and+ -- 'pathColourBar'.+ --+ -- The colour map this function recieves it given by+ -- 'Plots.Style.axisColourMap' from "Plots.Style"+ --+ -- Default is 'gradientColourBar'.+ colourBarDraw :: Lens' a (ColourMap -> QDiagram b V2 (N a) Any)+ colourBarDraw = colourBar . lens cbDraw (\c a -> c {cbDraw = a})++ -- | The width (orthogonal to the colour bar direction) of the colour+ -- bar.+ --+ -- 'Default' is @20@.+ colourBarWidth :: Lens' a (N a)+ colourBarWidth = colourBar . lens cbWidth (\c a -> c {cbWidth = a})++ -- | Set the length of the colour bar given the length of the axis the+ -- colour bar is aligned to.+ --+ -- 'Default' is 'id'.+ colourBarLengthFunction :: Lens' a (N a -> N a)+ colourBarLengthFunction = colourBar . lens cbLengthFun (\c a -> c {cbLengthFun = a})++ -- | Gap between the axis and the colour bar (if rendered with an axis).+ --+ -- 'Default' is @20@.+ colourBarGap :: Lens' a (N a)+ colourBarGap = colourBar . lens cbGap (\c a -> c {cbGap = a})++ -- | Style used for the outline of a colour bar.+ colourBarStyle :: Lens' a (Style V2 (N a))+ colourBarStyle = colourBar . lens cbStyle (\c a -> c {cbStyle = a})++instance HasColourBar (ColourBar b n) b where+ colourBar = id++instance HasGap (ColourBar b n) where+ gap = colourBarGap++instance HasPlacement (ColourBar b n) where+ placement = lens cbPlacement (\c p -> c {cbPlacement = p})++-- This is a kinda strange instance that I'm using as an experiment.+-- The Orientation depends on the 'Placement' of the colour bar.+--+-- \ N /+-- W * E+-- / S \+--+-- if it's on the east or west it's vertical, north or south it's+-- horizontal. If it's on a border it uses whatever way the gap+-- direction points. If the direction is parallel to the direction it's+-- on, we arbitrary choose pointing NE or SE to be vertical, NW and SW+-- to be horizontal (just for completeness, having such gap directions+-- doesn't make much sense).+--+-- When reversing the direction we map E <-> S and N <-> W. The gap+-- direction is rotated to match the new position and anchor has its x+-- and y flipped.+instance HasOrientation (ColourBar b n) where+ orientation = lens getter setter where++ getter p+ | north || south = Horizontal+ | east || west = Vertical+ | northEast = bool Horizontal Vertical (dx > dy)+ | southEast = bool Horizontal Vertical (dx > -dy)+ | southWest = bool Horizontal Vertical (dx < dy)+ | northWest = bool Horizontal Vertical (dx < -dy)+ | otherwise = error $ "internal error: get colourBar orientation: "+ ++ show (p ^. placement)+ where+ V2 x y = p ^. placementAt+ V2 dx dy = p ^. gapDirection . _Dir+ north = x < y && x > (-y)+ east = x > y && x > (-y)+ south = x > y && x < (-y)+ west = x < y && x < (-y)+ northEast = x == y && x > 0+ southEast = x == (-y) && x > 0+ southWest = x == y && x < 0+ northWest = x == (-y) && x < 0++ setter p o+ | getter p == o = p+ | otherwise = p & placementAt %~ flipX_Y+ & placementAnchor %~ flipX_Y+ & gapDirection ._Dir %~ flipX_Y++instance Typeable n => HasStyle (ColourBar b n) where+ applyStyle sty = colourBarStyle %~ applyStyle sty++instance Functor f => HasMajorTicks f (ColourBar b n) where+ majorTicks = lens cbTicks (\c a -> c {cbTicks = a})++instance Functor f => HasTickLabels f (ColourBar b n) b where+ tickLabel = lens cbTickLabels (\c a -> c {cbTickLabels = a})++instance HasVisibility (ColourBar b n) where+ visible = lens cbVisible (\c a -> c {cbVisible = a})++-- | Add a colour bar to an object, using the bounding box for the object.+addColourBar+ :: (TypeableFloat n, Renderable (Path V2 n) b)+ => BoundingBox V2 n -- ^ bounding box to place against+ -> ColourBar b n --+ -> ColourMap+ -> (n,n)+ -> QDiagram b V2 n Any+addColourBar bb cbo@ColourBar {..} cm bnds+ | cbVisible = placeAgainst bb cbPlacement cbGap cb+ | otherwise = mempty+ where+ cb = renderColourBar cbo cm bnds l+ -- the length used for the rendered colour bar+ l = cbLengthFun bbl+ -- the length of the side of the bounding box the colour bar will be+ -- against+ bbl = orient cbo bx by+ V2 bx by = boxExtents bb++-- | Render a colour bar by it's self at a given width. Note this+-- ignores 'colourBarGap' and 'colourBarLengthFunction'.+renderColourBar+ :: (TypeableFloat n, Renderable (Path V2 n) b)+ => ColourBar b n -- ^ options for colour bar+ -> ColourMap -- ^ map to use+ -> (n,n) -- ^ bounds of the values on the colour bar+ -> n -- ^ length of the colour bar+ -> QDiagram b V2 n Any+renderColourBar cb@ColourBar {..} cm bnds@(lb,ub) l+ | cbVisible = bar # xy id reflectY+ # o id (reflectY . _reflectX_Y)++ <> tLbs+ | otherwise = mempty++ where+ -- These functions deal with the different cases for the position of+ -- the colour bar so that the ticks and labels are on the outside of+ -- the axis and the bar horizontal/vertical depending on which side+ -- the bar is on.+ o, xy :: a -> a -> a+ o = orient cb+ xy a b = if let V2 x y = cb^.placementAt in x > y+ then a else b++ w = cbWidth+ -- move a value on the colour bar such that+ -- f lb = -l/2+ -- f ub = l/2+ -- so it ligns up with the colour bar+ f x = (x - (ub + lb)/2) / (ub - lb) * l+ inRange x = x >= lb && x <= ub++ bar = outline <> tks <> gLines <> colours++ -- the outline+ outline = rect l w # applyStyle (cbStyle & _fillTexture .~ _AC ## transparent)++ -- displaying the colour map+ colours = cbDraw cm # centerXY # scaleX l # scaleY w++ -- the ticks+ tickXs = view majorTicksFunction cbTicks bnds+ tickXs' = filter inRange tickXs+ tks+ | cbTicks ^. hidden = mempty+ | otherwise = foldMap (\x -> aTick # translate (V2 (f x) (-w/2))) tickXs'+ aTick = someTick (cbTicks ^. majorTicksAlignment) (cbTicks ^. majorTicksLength)++ someTick tType d = case tType of+ TickSpec (fromRational -> aa) (fromRational -> bb)+ -> mkP2 0 (-d*bb) ~~ mkP2 0 (d*aa)+ AutoTick -> mkP2 0 (-d) ~~ mkP2 0 d++ -- grid lines+ gridXs = filter inRange $ view majorGridLinesFunction cbGridLines tickXs bnds+ gLines+ | cbGridLines ^. hidden = mempty+ | otherwise = foldMap mkGridLine gridXs+ # strokePath+ # applyStyle (cbGridLines ^. majorGridLinesStyle)+ mkGridLine x = mkP2 (f x) (-w/2) ~~ mkP2 (f x) (w/2)++ -- tick labels+ tickLabelXs = view tickLabelFunction cbTickLabels tickXs' bnds+ tLbs+ | cbTickLabels ^. hidden = mempty+ | otherwise = foldMap drawTickLabel tickLabelXs+ drawTickLabel (x,label) =+ view tickLabelTextFunction cbTickLabels tAlign label+ # translate v+ # applyStyle (cbTickLabels ^. tickLabelStyle)+ where v = V2 (f x) (- w/2 - view tickLabelGap cbTickLabels)+ # xy id (_y %~ negate)+ # o id ((_y %~ negate) . flipX_Y)++ tAlign = o (xy (BoxAlignedText 0.5 1) (BoxAlignedText 0.5 0))+ (xy (BoxAlignedText 0 0.5) (BoxAlignedText 1 0.5))++-- > import Plots+-- > gradientColourBarExample = gradientColourBar viridis # scaleX 20+-- > pathColourBarExample = pathColourBar 10 viridis # scaleX 20++-- | The colour bar generated by a gradient texture. The final diagram+-- is 1 by 1, with origin at the middle of the left side. This can be+-- used as the 'colourBarDraw' function.+--+-- This may not be supported by all backends.+--+-- <<diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg#diagram=gradientColourBarExample&width=600>>+gradientColourBar :: (TypeableFloat n, Renderable (Path V2 n) b) => ColourMap -> QDiagram b V2 n Any+gradientColourBar cm =+ rect 1 1+ # fillTexture grad+ # lw none+ where+ stops = map (\(x,c) -> GradientStop (SomeColor c) (fromRational x)) (colourList cm)+ grad = defaultLG & _LG . lGradStops .~ stops++-- | Construct a colour bar made up of @n@ solid square paths. The final+-- diagram is 1 by 1, with origin at the middle of the left side. This+-- can be used as the 'colourBarDraw' function.+--+-- <<diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg#diagram=pathColourBarExample&width=600>>+pathColourBar :: (TypeableFloat n, Renderable (Path V2 n) b)+ => Int -> ColourMap -> QDiagram b V2 n Any+pathColourBar n cm = ifoldMap mkR xs+ where+ mkR i x = rect d' 1+ # alignR+ # fcA (cm ^. ixColour (x - 1/(2*fromIntegral n)))+ # translateX (fromRational x)+ # lw none+ where+ -- Some vector viewers don't render touching blocks of colour+ -- correctly. To solve this we overlap by half a bar length for+ -- all except the first bar (which is the one on top).+ d' | i == 0 = d+ | otherwise = d*1.5++ xs = tail (enumFromToN 0 1 n)+ d = 1 / fromIntegral n++flipX_Y :: Num n => V2 n -> V2 n+flipX_Y (V2 x y) = V2 (-y) (-x)++_reflectionX_Y :: (Additive v, R2 v, Num n) => Transformation v n+_reflectionX_Y = fromSymmetric $ (_xy %~ flipX_Y) <-> (_xy %~ flipX_Y)++_reflectX_Y :: (InSpace v n t, R2 v, Transformable t) => t -> t+_reflectX_Y = transform _reflectionX_Y+
+ src/Plots/Axis/Grid.hs view
@@ -0,0 +1,256 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Grid+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Lines that go along the axis. Supports major and minor gird lines+-- separately for each axis.+--+----------------------------------------------------------------------------+module Plots.Axis.Grid+ ( -- * Grid lines+ GridLines+ , HasGridLines (..)++ , MajorGridLines+ , HasMajorGridLines (..)+ , MinorGridLines+ , HasMinorGridLines (..)++ -- * Extra traversals+ , gridLinesStyle+ , gridLinesVisible++ , hideGridLines+ , showGridLines++ -- * Grid line functions+ , GridLineFunction+ , onTicksGridLineFunction+ , emptyGridLineFunction++ ) where++import Control.Lens hiding (( # ))+import Data.Data+import Data.Default+import Control.Monad.State++import Diagrams.Prelude+import Plots.Types++-- | A grid line function takes the positions of the respective ticks+-- (minor ticks for minor grid lines, major ticks for major grid+-- lines) and the bounds of the axis and returns the positions of the+-- grid lines.+--+-- These functions are used in conjuction with 'majorGridLineFunction'+-- and 'minorGridLineFunction' to control how the lines are drawn.+type GridLineFunction n = [n] -> (n, n) -> [n]++------------------------------------------------------------------------+-- Major grid lines+------------------------------------------------------------------------++data MajorGridLines v n = MajorGridLines+ { magFun :: GridLineFunction n+ , magStyle :: Style v n+ , magVisible :: Bool+ } deriving Typeable++type instance V (MajorGridLines v n) = v+type instance N (MajorGridLines v n) = n++class HasMajorGridLines f a where+ -- | The options for how to draw the grid lines. This can be used on+ -- various levels of the axis:+ --+ -- @+ -- 'majorGridLines' :: 'Traversal'' ('Axis' b c n) ('GridLines' ('BaseSpace' c) n)+ -- 'majorGridLines' :: 'Lens'' ('SingleAxis' b v n) ('GridLines' v n)+ -- 'majorGridLines' :: 'Lens'' ('GridLines' v n) ('GridLines' v n)+ -- @+ majorGridLines :: LensLike' f a (MajorGridLines (V a) (N a))++ -- | The function to calculate location of the major grid lines given+ -- location of the major ticks and bounds.+ majorGridLinesFunction :: Functor f => LensLike' f a (GridLineFunction (N a))+ majorGridLinesFunction = majorGridLines . lens magFun (\gl maf -> gl {magFun = maf})++ -- | The style applied to the major grid lines.+ majorGridLinesStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ majorGridLinesStyle = majorGridLines . lens magStyle (\gl sty -> gl {magStyle = sty})++instance HasMajorGridLines f (MajorGridLines v n) where+ majorGridLines = id++instance (Typeable n, Floating n) => Default (MajorGridLines v n) where+ def = MajorGridLines+ { magFun = onTicksGridLineFunction+ , magStyle = mempty # lwO 0.8+ , magVisible = True+ }++instance HasVisibility (MajorGridLines v n) where+ visible = lens magVisible (\gl b -> gl {magVisible = b})++instance Typeable n => HasStyle (MajorGridLines v n) where+ applyStyle s = majorGridLinesStyle %~ applyStyle s++------------------------------------------------------------------------+-- Minor grid lines+------------------------------------------------------------------------++data MinorGridLines v n = MinorGridLines+ { migFun :: GridLineFunction n+ , migStyle :: Style v n+ , migVisible :: Bool+ } deriving Typeable++type instance V (MinorGridLines v n) = v+type instance N (MinorGridLines v n) = n++class HasMinorGridLines f a where+ -- | The options for how to draw the grid lines. This can be used on+ -- various levels of the axis:+ --+ -- @+ -- 'minorGridLines' :: 'Traversal'' ('Axis' b c n) ('GridLines' ('BaseSpace' c) n)+ -- 'minorGridLines' :: 'Lens'' ('SingleAxis' b v n) ('GridLines' v n)+ -- 'minorGridLines' :: 'Lens'' ('GridLines' v n) ('GridLines' v n)+ -- @+ minorGridLines :: LensLike' f a (MinorGridLines (V a) (N a))++ -- | The function to calculate location of the minor grid lines given+ -- location of the minor ticks and bounds.+ minorGridLinesFunction :: Functor f => LensLike' f a (GridLineFunction (N a))+ minorGridLinesFunction = minorGridLines . lens migFun (\gl mif -> gl {migFun = mif})+++ -- | The style applied to the minor grid lines.+ minorGridLinesStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ minorGridLinesStyle = minorGridLines . lens migStyle (\gl sty -> gl {migStyle = sty})++instance HasMinorGridLines f (MinorGridLines v n) where+ minorGridLines = id++instance (Typeable n, Floating n) => Default (MinorGridLines v n) where+ def = MinorGridLines+ { migFun = onTicksGridLineFunction+ , migStyle = mempty # lwO 0.5+ , migVisible = False+ }++-- | Hidden by default.+instance HasVisibility (MinorGridLines v n) where+ visible = lens migVisible (\gl b -> gl {migVisible = b})++instance Typeable n => HasStyle (MinorGridLines v n) where+ applyStyle s = minorGridLinesStyle %~ applyStyle s++------------------------------------------------------------------------+-- Grid lines helpers+------------------------------------------------------------------------++-- | Place grid lines at the same position as the respective ticks. This+-- is the 'Default'.+onTicksGridLineFunction :: GridLineFunction n+onTicksGridLineFunction = const++-- | The 'GridLineFunction' such that no grid lines appear.+--+-- See 'hideGridLines', 'majorGridLineVisible' or+-- 'minorGridLineVisible' if you just want to hide the grid lines.+emptyGridLineFunction :: GridLineFunction n+emptyGridLineFunction _ _ = []++-- | Traversal over both the major and minor grid styles.+--+-- @+-- 'gridLinesVisible' :: 'Traversal'' ('Axis' b c n) 'Bool'+-- 'gridLinesVisible' :: 'Traversal'' ('SingleAxis' b v n) 'Bool'+-- 'gridLinesVisible' :: 'Traversal'' ('GridLines' v n) 'Bool'+-- @+gridLinesVisible :: (HasGridLines f a, Applicative f) => LensLike' f a Bool+gridLinesVisible = gridLines . vis where+ vis :: Traversal' (GridLines v n) Bool+ vis f a =+ (\m mn -> a & majorGridLines . visible .~ m & minorGridLines . visible .~ mn)+ <$> f (a ^. majorGridLines . visible) <*> f (a ^. minorGridLines . visible)++------------------------------------------------------------------------+-- Both grid lines+------------------------------------------------------------------------++-- | Type holding infomation about both major and minor grid lines.+data GridLines v n = GridLines+ { majGrid :: MajorGridLines v n+ , minGrid :: MinorGridLines v n+ } deriving Typeable++type instance V (GridLines v n) = v+type instance N (GridLines v n) = n++class (HasMinorGridLines f a, HasMajorGridLines f a) => HasGridLines f a where+ gridLines :: LensLike' f a (GridLines (V a) (N a))++instance Functor f => HasGridLines f (GridLines v n) where+ gridLines = id++instance (Typeable n, Floating n) => Default (GridLines v n) where+ def = GridLines+ { majGrid = def+ , minGrid = def+ }++instance Functor f => HasMajorGridLines f (GridLines v n) where+ majorGridLines = lens majGrid (\g a -> g {majGrid = a})++instance Functor f => HasMinorGridLines f (GridLines v n) where+ minorGridLines = lens minGrid (\g a -> g {minGrid = a})++instance Typeable n => HasStyle (GridLines v n) where+ applyStyle s = (majorGridLines %~ applyStyle s) . (minorGridLines %~ applyStyle s)++-- | Hide both major and minor grid lines.+--+-- @+-- 'hideGridLines' :: 'Axis' b c n -> 'Axis' b c n+-- 'hideGridLines' :: 'SingleAxis' b c n -> 'SingleAxis' b c n+-- 'hideGridLines' :: 'GridLines' b c n -> 'GirdLines' b c n+-- @+hideGridLines :: (HasGridLines Identity a, MonadState a m) => m ()+hideGridLines = do+ minorGridLines . visible .= False+ majorGridLines . visible .= False++-- | Show both major and minor grid lines.+--+-- @+-- 'showGridLines' :: 'Axis' b c n -> 'Axis' b c n+-- 'showGridLines' :: 'SingleAxis' b c n -> 'SingleAxis' b c n+-- 'showGridLines' :: 'GridLines' b c n -> 'GirdLines' b c n+-- @+showGridLines :: (HasGridLines Identity a, MonadState a m) => m ()+showGridLines = do+ minorGridLines . visible .= True+ majorGridLines . visible .= True++-- | Traversal over both the major and minor grid styles. This can be used at seversal levels in the Axis:+gridLinesStyle :: (HasGridLines f a, Applicative f) => LensLike' f a (Style (V a) (N a))+gridLinesStyle = gridLines . styles where+ styles :: Traversal' (GridLines v n) (Style v n)+ styles f a =+ (\m mn -> a & majorGridLinesStyle .~ m & minorGridLinesStyle .~ mn)+ <$> f (a ^. majorGridLinesStyle) <*> f (a ^. minorGridLinesStyle)
+ src/Plots/Axis/Labels.hs view
@@ -0,0 +1,236 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Labels+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Low level module defining types for axis labels and tick labels.+--+----------------------------------------------------------------------------+module Plots.Axis.Labels+ ( -- * Axis line labels+ HasAxisLabel (..)+ , AxisLabel+ , AxisLabelPosition (..)+ , AxisLabelPlacement (..)++ -- * Axis tick labels+ , TickLabels+ , HasTickLabels (..)+ , tickLabelPositions+ , atMajorTicks++ -- * Misc+ , TextFunction+ ) where++import Control.Lens hiding (( # ))+import Data.Data+import Data.Default++import Diagrams.Prelude hiding (view)+import Diagrams.TwoD.Text+import Plots.Types++-- | Function to render the axis label from a string. This is very basic+-- now and will be replace by a more sophisticated system.+type TextFunction b v n = TextAlignment n -> String -> QDiagram b v n Any++------------------------------------------------------------------------+-- Axis labels+------------------------------------------------------------------------++-- | The position of the 'AxisLabel' along the axis.+data AxisLabelPosition+ = MiddleAxisLabel+ | LowerAxisLabel+ | UpperAxisLabel++-- | Whether the 'AxisLabel' should be inside or ouside the axis.+data AxisLabelPlacement+ = InsideAxisLabel+ | OutsideAxisLabel++data AxisLabel b v n = AxisLabel+ { alFun :: TextFunction b v n+ , alText :: String+ , alStyle :: Style v n+ , alGap :: n+ , alPos :: AxisLabelPosition+ , alPlacement :: AxisLabelPlacement+ , alVisible :: Bool+ }++type instance V (AxisLabel b v n) = v+type instance N (AxisLabel b v n) = n++class HasAxisLabel f a b | a -> b where+ -- | The options for the label of the axis. This can be used on+ -- various levels of the axis:+ --+ -- @+ -- 'axisLabel' :: 'Traversal'' ('Axis' b c n) ('AxisLabel' ('BaseSpace' c) n)+ -- 'axisLabel' :: 'Lens'' ('SingleAxis' b v n) ('AxisLabel' v n)+ -- 'axisLabel' :: 'Lens'' ('AxisLabel' v n) ('AxisLabel' v n)+ -- @+ axisLabel :: LensLike' f a (AxisLabel b (V a) (N a))++ -- | The text to use when labeling the axis.+ axisLabelText :: Functor f => LensLike' f a String+ axisLabelText = axisLabel . lens alText (\al txt -> al {alText = txt})++ -- | The 'TextFunction' to render the text of the axis label.+ axisLabelTextFunction :: Functor f => LensLike' f a (TextFunction b (V a) (N a))+ axisLabelTextFunction = axisLabel . lens alFun (\al f -> al {alFun = f})++ -- | The gap between the axis and the labels, in the direction+ -- corresponding to the 'axisLabelPosition'.+ axisLabelGap :: Functor f => LensLike' f a (N a)+ axisLabelGap = axisLabel . lens alGap (\al sty -> al {alGap = sty})++ -- | The 'Style' to use on the rendered text.+ axisLabelStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ axisLabelStyle = axisLabel . lens alStyle (\al sty -> al {alStyle = sty})++ -- | The position the label will be placed parallel the axis.+ axisLabelPosition :: Functor f => LensLike' f a AxisLabelPosition+ axisLabelPosition = axisLabel . lens alPos (\al sty -> al {alPos = sty})++ -- | Whether the axis label should be placed inside or outside the+ -- axis.+ axisLabelPlacement :: Functor f => LensLike' f a AxisLabelPosition+ axisLabelPlacement = axisLabel . lens alPos (\al sty -> al {alPos = sty})++instance HasAxisLabel f (AxisLabel b v n) b where+ axisLabel = id++instance Typeable n => HasStyle (AxisLabel b v n) where+ applyStyle = over axisLabelStyle . applyStyle++instance HasVisibility (AxisLabel b v n) where+ visible = lens alVisible (\al b -> al {alVisible = b})++instance HasGap (AxisLabel b v n) where+ gap = axisLabelGap++instance (TypeableFloat n, Renderable (Text n) b)+ => Default (AxisLabel b V2 n) where+ def = AxisLabel+ { alFun = mkText+ , alText = ""+ , alStyle = mempty & fontSize (output 11)+ & recommendFillColor black+ , alGap = 30+ , alPos = MiddleAxisLabel+ , alPlacement = OutsideAxisLabel+ , alVisible = True+ }++------------------------------------------------------------------------+-- Tick labels+------------------------------------------------------------------------++-- Labels that are placed next to the ticks of an axis.++data TickLabels b v n = TickLabels+ { tlFun :: [n] -> (n,n) -> [(n, String)]+ , tlTextFun :: TextFunction b v n+ , tlStyle :: Style v n+ , tlGap :: n+ , tlVisible :: Bool+ } deriving Typeable++type instance V (TickLabels b v n) = v+type instance N (TickLabels b v n) = n++class HasTickLabels f a b | a -> b where+ -- | The options for the label of ticks. This can be used on various+ -- levels of the axis:+ --+ -- @+ -- 'tickLabel' :: 'Traversal'' ('Tick' b c n) ('TickLabels' ('BaseSpace' c) n)+ -- 'tickLabel' :: 'Lens'' ('SingleAxis' b v n) ('TickLabels' v n)+ -- 'tickLabel' :: 'Lens'' ('TickLabel' v n) ('TickLabels' v n)+ -- @+ tickLabel :: LensLike' f a (TickLabels b (V a) (N a))++ -- | The 'TextFunction' to render the text.+ --+ -- 'Default' is 'mkText'.+ tickLabelTextFunction :: Functor f => LensLike' f a (TextFunction b (V a) (N a))+ tickLabelTextFunction = tickLabel . lens tlTextFun (\tl f -> tl {tlTextFun = f})++ -- | Tick labels functions are used to draw the tick labels. They has+ -- access to the major ticks and the current bounds. Returns the+ -- position of the tick and label to use at that position.+ --+ -- 'Default' is @'atMajorTicks' 'floatShow'@+ tickLabelFunction :: Functor f => LensLike' f a ([N a] -> (N a, N a) -> [(N a, String)])+ tickLabelFunction = tickLabel . lens tlFun (\tl f -> tl {tlFun = f})++ -- | The 'Style' to use on the rendered text.+ --+ -- 'Default' is @'fontSize' ('output' 11)@.+ tickLabelStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ tickLabelStyle = tickLabel . lens tlStyle (\tl sty -> tl {tlStyle = sty})++ -- | The gap between the axis and the tick labels.+ --+ -- 'Default' is @12@.+ tickLabelGap :: Functor f => LensLike' f a (N a)+ tickLabelGap = tickLabel . lens tlGap (\tl n -> tl {tlGap = n})++instance HasTickLabels f (TickLabels b v n) b where+ tickLabel = id++instance HasGap (TickLabels b v n) where+ gap = tickLabelGap++instance (TypeableFloat n, Renderable (Text n) b)+ => Default (TickLabels b V2 n) where+ def = TickLabels+ { tlFun = atMajorTicks floatShow+ , tlTextFun = mkText+ , tlStyle = mempty & fontSize (output 11)+ & recommendFillColor black+ , tlGap = 12+ , tlVisible = True+ }++instance HasVisibility (TickLabels b v n) where+ visible = lens tlVisible (\tl b -> tl {tlVisible = b})++-- | Setter over the final positions the major ticks. This is not as+-- general as 'minorTicksFunction' because you don't have access to+-- the bounds but it can be useful when you know exactly what ticks+-- you want to add or modify existing tick positions.+tickLabelPositions+ :: (HasTickLabels f a b, Settable f)+ => LensLike' f a [(N a, String)]+tickLabelPositions = tickLabelFunction . mapped . mapped++-- | Numbers are shown as 'Float's to reduce the chance of numbers like+-- 1.30000000008. (This is not an ideal solution.)+floatShow :: Real n => n -> String+floatShow = show . (realToFrac :: Real n => n -> Float)++-- | Make a 'TickLabelFunction' by specifying how to draw a single label+-- from a position on the axis.+atMajorTicks :: (n -> String) -> [n] -> (n,n) -> [(n, String)]+atMajorTicks f ticks _ = map ((,) <*> f) ticks++-- -- | Use the list of strings as the labels for the axis, starting at 1+-- -- and going to 2, 3, 4 ... .+-- stringLabels :: Num n => [(n, String)] -> TickLabelFunction n+-- stringLabels nms _ _ = iover (each . itraversed) (\i l -> (fromIntegral (i + 1), l)) nms+
+ src/Plots/Axis/Line.hs view
@@ -0,0 +1,103 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Line+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- The lines that make up an axis.+--+----------------------------------------------------------------------------+module Plots.Axis.Line+ ( -- * Grid lines+ AxisLine+ , HasAxisLine (..)++ -- * Axis line types+ , AxisLineType (..)++ ) where++import Control.Lens hiding (( # ))+import Data.Data+import Data.Default++import Diagrams.Prelude+import Plots.Types++-- | Where axis line for coordinate should be drawn. The 'Default' is+-- 'BoxAxisLine'.+data AxisLineType+ = BoxAxisLine+ | LeftAxisLine+ | MiddleAxisLine+ | RightAxisLine+ | NoAxisLine+ deriving (Show, Eq, Typeable)++instance Default AxisLineType where+ def = BoxAxisLine++-- | Information about position and style of axis lines.+data AxisLine v n = AxisLine+ { alType :: AxisLineType+ , alArrowOpts :: Maybe (ArrowOpts n)+ , alVisible :: Bool+ , alStyle :: Style v n+ } deriving Typeable++type instance V (AxisLine v n) = v+type instance N (AxisLine v n) = n++-- | Class of object that have an 'AxisLine'.+class HasAxisLine f a where+ -- | Lens onto the 'AxisLine'.+ axisLine :: LensLike' f a (AxisLine (V a) (N a))++ -- | The position of the axis line around the axis.+ --+ -- 'Default' is 'BoxAxisLine'.+ axisLineType :: Functor f => LensLike' f a AxisLineType+ axisLineType = axisLine . lens alType (\al sty -> al {alType = sty})++ -- | The options for if you want the axis line to have arrows at the+ -- end.+ --+ -- 'Default' is 'Nothing'.+ --+ -- XXX (feature not currently implimented)+ axisLineArrowOpts :: Functor f => LensLike' f a (Maybe (ArrowOpts (N a)))+ axisLineArrowOpts = axisLine . lens alArrowOpts (\al sty -> al {alArrowOpts = sty})++ -- | The 'Style' applied to the axis line+ axisLineStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ axisLineStyle = axisLine . lens alStyle (\al sty -> al {alStyle = sty})++instance HasAxisLine f (AxisLine v n) where+ axisLine = id++-- Note this is different from 'NoAxisLine'. Other parts that are+-- tied to the axis line will still be present when+-- 'axisLineVisible' is 'False'. But if 'NoAxisLine' is set, there+-- never any line for those things to attach to, so they don't+-- exist.+instance HasVisibility (AxisLine v n) where+ visible = lens alVisible (\al b -> al {alVisible = b})++instance Typeable n => Default (AxisLine v n) where+ def = AxisLine+ { alType = def+ , alArrowOpts = def+ , alVisible = True+ , alStyle = mempty+ }+
+ src/Plots/Axis/Render.hs view
@@ -0,0 +1,671 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ViewPatterns #-}++-- Orphan Mainable Axis instance.+{-# OPTIONS_GHC -fno-warn-orphans #-}++-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Render+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Low level module containing functions for rendering different types+-- of axis.+--+----------------------------------------------------------------------------+module Plots.Axis.Render+ ( -- * Rendering axes+ RenderAxis (..)+ , r2AxisMain++ -- * Low level+ , buildPlots+ )where++import Data.Foldable+import Data.Typeable+import Data.Bool+import Data.List (sort)++import Diagrams.BoundingBox+import Diagrams.Prelude+import Diagrams.TwoD.Text+import Linear hiding (translation, rotate)++import Diagrams.Backend.CmdLine+import Diagrams.Coordinates.Polar++import Plots.Axis+import Plots.Axis.ColourBar+import Plots.Axis.Grid+import Plots.Axis.Labels+import Plots.Axis.Line+import Plots.Axis.Scale+import Plots.Axis.Title+import Plots.Axis.Ticks+import Plots.Legend+import Plots.Style+import Plots.Types+import Plots.Util++import Prelude++------------------------------------------------------------------------+-- Mainable instances+------------------------------------------------------------------------++instance (TypeableFloat n,+ Renderable (Path V2 n) b,+ Mainable (QDiagram b V2 n Any))+ => Mainable (Axis b Polar n) where+ type MainOpts (Axis b Polar n) = MainOpts (QDiagram b V2 n Any)++ mainRender opts = mainRender opts . renderAxis++instance (TypeableFloat n,+ Renderable (Path V2 n) b,+ Mainable (QDiagram b V2 n Any))+ => Mainable (Axis b V2 n) where+ type MainOpts (Axis b V2 n) = MainOpts (QDiagram b V2 n Any)++ mainRender opts = mainRender opts . renderAxis++instance ToResult (Axis b v n) where+ type Args (Axis b v n) = ()+ type ResultOf (Axis b v n) = Axis b v n++ toResult d _ = d++-- | 'mainWith' specialised to a 2D Axis.+r2AxisMain+ :: (Parseable (MainOpts (QDiagram b V2 Double Any)),+ Mainable (Axis b V2 Double))+ => Axis b V2 Double+ -> IO ()+r2AxisMain = mainWith++------------------------------------------------------------------------+-- Low level functions+------------------------------------------------------------------------++-- | Build a list of styled plots from the axis, ready to be rendered.+-- This takes into account any 'AxisStyle' changes and applies the+-- 'finalPlots' modifications.+--+-- The 'StyledPlots' can be rendered with 'renderStyledPlot' and the+-- legend entries can be obtained with 'styledPlotLegends'. This is+-- what 'renderAxis' can uses internally but might be useful for+-- debugging or generating your own legend.+buildPlots :: BaseSpace c ~ v => Axis b c n -> [StyledPlot b v n]+buildPlots a = map (appEndo $ a ^. plotModifier)+ $ zipWith styleDynamic (a ^.. axisStyles) (a ^. axisPlots)+ -- TODO: correct order++------------------------------------------------------------------------+-- Render axis+------------------------------------------------------------------------++-- | Renderable axes.+class RenderAxis b v n where+ -- | Render an axis to a diagram. The size of the diagram is+ -- determined by the 'axisSize'.+ renderAxis :: Axis b v n -> QDiagram b (BaseSpace v) n Any++-- | The 'RenderAxis' class provides a default way to render an axis for+-- each space.+instance (TypeableFloat n, Renderable (Path V2 n) b)+ => RenderAxis b V2 n where+ -- | Render an axis and its plots, as well as the legend and colour+ -- bar.+ renderAxis = renderR2Axis++renderR2Axis :: (TypeableFloat n, Renderable (Path V2 n) b)+ => Axis b V2 n -> QDiagram b V2 n Any+renderR2Axis a = frame 40+ $ leg+ <> ttl+ <> cBar+ <> plots+ <> drawAxis ex ey LowerLabels+ <> drawAxis ey ex LeftLabels+ where+ spec = AxisSpec xs t (a^.axes . column logScale) (a ^. axisColourMap)+ plots = foldMap (renderStyledPlot spec) styledPlots+ drawAxis ll ll2 = axisOnBasis origin xs (a^.axes.el ll) (a^.axes.column logScale) t ll ll2+ --+ (xs, tv, t') = calculateScaling (a^.axes.column axisScaling) (boundingBox styledPlots)+ t = tv <> t'+ --+ bb = fromCorners (P . apply t $ fmap fst xs) (P . apply t $ fmap snd xs)+ leg = drawLegend bb (styledPlotLegends styledPlots) (a ^. legend)+ --++ -- The colour bar+ cBar = addColourBar bb (a^.colourBar) (a ^. axisColourMap) (a^.colourBarRange)+ -- title+ ttl = drawTitle bb (a^.title)+ --+ styledPlots = buildPlots a++-- | The position of axis labels for a+data LabelPosition+ = NoLabels+ | LowerLabels+ | LeftLabels+ | RightLabels+ | UpperLabels+ deriving (Show, Eq, Typeable)++axisOnBasis+ :: forall b v n. (v ~ V2, TypeableFloat n, HasLinearMap v, Metric v,+ Renderable (Path V2 n) b, n ~ N (v n), v ~ V (v n), OrderedField n)+ => Point v n -- start of axis+ -> v (n, n) -- calculated bounds+ -> SingleAxis b v n -- axis data+ -> v LogScale -- log scale+ -> T2 n -- transformation to apply to positions of things+ -> E v -- direction of axis+ -> E v -- orthogonal direction of axis+ -> LabelPosition -- where (if at all) should labels be placed?+ -> QDiagram b V2 n Any -- resulting axis+axisOnBasis p bs a ls t e eO lp+ | a ^. hidden = phantom axis+ | otherwise = axis+ where+ axis = tickLabels <> axLabels <> ticks <> line <> grid+ tStroke = stroke . transform t++ -- axis labels (x,y etc.)+ axLabels+ | null txt || lp == NoLabels || a ^. axisLabel . hidden+ = mempty+ | otherwise = (a ^. axisLabelTextFunction) txtAlign txt+ # moveTo p'+ # applyStyle (a ^. axisLabelStyle)+ where+ p' = p & ep e .~ x+ & ep eO .~ y0+ -- & logPoint ls+ & coscale+ & papply t+ & ep eO +~ negate' labelGap+ labelGap = a ^. axisLabelGap+ txt = a ^. axisLabelText+ x = case a ^. axisLabelPosition of+ MiddleAxisLabel -> (x0 + x1) / 2+ LowerAxisLabel -> x0+ UpperAxisLabel -> x1+ -- axLabelD = a ^. axisLabels . el e++ -- tick labels+ tickLabels+ | lp == NoLabels || a ^. tickLabel . hidden = mempty+ | otherwise = foldMap drawLabels (map snd $ take 1 ys)+ # applyStyle (a ^. tickLabelStyle)+ where+ -- tickLabelsD = a ^. axisTickLabels . el e+ labelFun = a ^. tickLabelFunction+ drawLabels y = foldMap f (labelFun (filter inRange majorTickXs) b)+ where+ f (x, l) = place dia p'+ where+ dia = view tickLabelTextFunction a txtAlign l+ p' = p & ep e .~ x+ & ep eO .~ y+ -- & logPoint ls+ & coscale+ & papply t+ & ep eO +~ negate' (a ^. tickLabelGap)++ -- the grid++ grid = majorLines <> minorLines+ where+ majorLines+ | a ^. majorGridLines . hidden = mempty+ | otherwise = foldMap mkGridLine majorGridXs'+ # tStroke+ # applyStyle (a ^. majorGridLinesStyle)+ majorGridXs = view majorGridLinesFunction a majorTickXs b+ majorGridXs' = map coscaleNum (filter inRange majorGridXs)+ --+ minorLines+ | a ^. minorGridLines . hidden = mempty+ | otherwise = foldMap mkGridLine minorGridXs'+ # tStroke+ # applyStyle (a ^. minorGridLinesStyle)+ minorGridXs = view minorGridLinesFunction a minorTickXs b+ minorGridXs' = map coscaleNum (filter inRange minorGridXs)+ -- --+ mkGridLine x = pathFromVertices [f y0, f y1]+ where f y = over lensP ((el e .~ x) . (el eO .~ y)) p+ --+ -- gridD = a ^. axisGridLines ^. el e -- :: GridLines N++ -- the ticks++ ticks = foldMap drawTicks ys++ drawTicks (pos,y) = maTicks <> miTicks+ where+ maTicks+ | a ^. majorTicks . hidden = mempty+ | otherwise = foldMap (positionTick majorTick) majorTickXs'+ # stroke+ # applyStyle (a ^. majorTicksStyle)+ --+ miTicks+ | a ^. minorTicks . hidden = mempty+ | otherwise = foldMap (positionTick minorTick) minorTickXs'+ # stroke+ # applyStyle (a ^. minorTicksStyle)+ --+ minorTick = someTick (a ^. minorTicksAlignment) (a ^. minorTicksLength)+ majorTick = someTick (a ^. majorTicksAlignment) (a ^. majorTicksLength)+ --+ someTick tType d = pathFromVertices $+ case tType of+ AutoTick ->+ case pos of+ LowerAxis -> [origin & ep eO -~ d, origin]+ MiddleAxis -> [origin & ep eO -~ d, origin & ep eO +~ d]+ UpperAxis -> [origin, origin & ep eO +~ d]+ TickSpec (fromRational -> aa) (fromRational -> bb) ->+ case pos of+ UpperAxis -> [origin & ep eO -~ d*bb, origin & ep eO +~ d*aa]+ _ -> [origin & ep eO -~ d*aa, origin & ep eO +~ d*bb]+ -- NoTick -> []+ -- middleTick d =+ -- pathFromVertices+ positionTick tick x = place tick p'+ where+ p' = over lensP ((el e .~ x) . (el eO .~ y)) p+ # transform t++ -- axis lines++ line+ | a ^. axisLine . hidden = mempty+ | otherwise = foldMap mkline (map snd ys) -- merge with ticks?+ # transform t+ # stroke+ -- # applyStyle (a ^. axisLine e . axisArrowOpts . _Just . shaftStyle)+ # lineCap LineCapSquare+ where+ -- TODO: Arrow for R3+ mkline y = pathFromVertices+ $ map (\x -> over lensP ((el e .~ x) . (el eO .~ y)) p) [x0, x1] :: Path v n++ -- measurements+ b@(x0,x1) = bs ^. el e :: (n, n) -- bounds+ coscale = ep e %~ coscaleNum+ coscaleNum = scaleNum (bs ^. el e) (ls ^. el e)+ yb@(y0,y1) = bs ^. el eO . if lp == UpperLabels+ then swapped+ else id+ inRange x = x >= x0 && x <= x1+ --+ majorTickXs = sort $ view majorTicksFunction a b+ majorTickXs' = map coscaleNum (filter inRange majorTickXs)+ minorTickXs = sort $ view minorTicksFunction a majorTickXs b+ minorTickXs' = map coscaleNum (filter inRange minorTickXs)+ --+ ys = getAxisLinePos yb lineType+ lineType = a ^. axisLineType+ txtAlign =+ case lp of+ LowerLabels -> BoxAlignedText 0.5 1+ LeftLabels -> BoxAlignedText 1 0.5+ RightLabels -> BoxAlignedText 0 0.5+ UpperLabels -> BoxAlignedText 1 0+ _ -> error "No labels" -- XXX Temporary+ -- t2 = scaling 4+ --+ negate' = if lp == UpperLabels || lp == RightLabels+ then id+ else negate++-- utilities++getAxisLinePos :: (Num n, Ord n) => (n, n) -> AxisLineType -> [(AxisPos, n)]+getAxisLinePos (a,b) aType = case aType of+ BoxAxisLine -> [(LowerAxis, a), (UpperAxis, b)]+ LeftAxisLine -> [(LowerAxis, a)]+ MiddleAxisLine -> [(,) MiddleAxis $+ if | a > 0 -> a+ | b < 0 -> b+ | otherwise -> 0]+ RightAxisLine -> [(UpperAxis, b)]+ NoAxisLine -> []++data AxisPos = LowerAxis | MiddleAxis | UpperAxis++------------------------------------------------------------------------+-- Utilities+------------------------------------------------------------------------++ep :: E v -> Lens' (Point v x) x+ep (E l) = lensP . l+{-# INLINE ep #-}++------------------------------------------------------------------------+-- Polar+------------------------------------------------------------------------++instance (TypeableFloat n, Renderable (Path V2 n) b)+ => RenderAxis b Polar n where+ renderAxis = renderPolarAxis++-- | An lower and upper bound for the bounding radius using @n@ envelope+-- calculations. The more calculations used, the smaller the range of+-- the bound.+boundingRadiusR :: (InSpace V2 n a, Enveloped a) => Int -> a -> (n, n)+boundingRadiusR (max 3 -> n) e =+ case appEnvelope (getEnvelope e) of+ Nothing -> (0,0)+ Just f ->+ let thetas = map (@@rad) $ enumFromToN 0 tau n+ vs = map angleV thetas++ -- The lower bound is the maximum distance obtained from the+ -- envelope trials. We know the radius will be at least this far.+ lowerBound = foldr (\v r -> max (f v) r) 0 vs++ -- In the worst case, there will be a point at the intersection of+ -- two neighbouring bounding planes from the envelope calculations.+ -- We can calculate the distance to this intersecion using simple+ -- trigonometry.+ -- (Note, this is why we need at least three envelope calculations,+ -- otherwise there wouldn't be any intersection between the bounding+ -- planes)+ upperBound = lowerBound / cos (pi / fromIntegral n)++ in (lowerBound, upperBound)++renderPolarAxis+ :: (TypeableFloat n, Renderable (Path V2 n) b)+ => Axis b Polar n -> QDiagram b V2 n Any+renderPolarAxis a = frame 15+ $ leg+ -- <> colourBar+ -- <> circles+ <> plots+ <> theAxis+ where+ r = snd $ boundingRadiusR 30 styledPlots+ spec = AxisSpec xs t (pure LinearAxis) (a ^. axisColourMap)+ plots = foldMap (renderStyledPlot spec) styledPlots++ dataBB = fromCorners (mkP2 (-r) (-r)) (mkP2 r r)+ (xs, tv, t') = calculateScaling (view _Wrapped $ a^.axes.column axisScaling) dataBB+ t = tv <> t'+ --+ theAxis = drawPolarAxis spec (a ^. axes)+ --+ bb = fromCorners (P . apply t $ fmap fst xs) (P . apply t $ fmap snd xs)+ leg = drawLegend bb (styledPlotLegends styledPlots) (a ^. legend)+ --+ styledPlots = map (appEndo $ a ^. plotModifier)+ $ zipWith styleDynamic (a ^.. axisStyles) (a ^. axisPlots)++drawPolarAxis+ :: forall b n. (Renderable (Path V2 n) b, TypeableFloat n)+ => AxisSpec V2 n -> Polar (SingleAxis b V2 n) -> QDiagram b V2 n Any+drawPolarAxis spec (Polar (V2 rA thetaA)) = fcA transparent $ rAx <> thetaAx where++ -- use a radius of the upper x bound for the axis (this is not ideal)+ r = spec ^. specBounds . _x . _2+ t = spec ^. specTrans+ s = avgScale t++ rInRange x = x >= 0 && x <= r*1.000001+ thetaInRange x = x >= 0 && x < tau++ ----------------------------------------------------------------------+ -- Radial axis+ ----------------------------------------------------------------------++ -- The radial axis consists of an axis line from the centre to the+ -- edge. The ticks and tickLabels are along this line. The grid lines+ -- are made up of circles that pass through the line, centered at the+ -- center of the plot.+ rAx+ | rA ^. hidden = mempty+ | otherwise = rAxLine <> rAxLabel <> rAxTicks <> rAxTickLabels <> rAxGridLines++ rAxLine = line # whenever (rA ^. axisLine . hidden) phantom+ where+ -- XXX for now the radial axis is on the theta=0 line. Need some+ -- way to change this+ line = (origin ~~ mkP2 r 0) # applyStyle (rA^.axisLineStyle)+ # transform t++ -- Radial axis label -------------------------------------------------++ rAxLabel+ | null rTxt || rA ^. axisLabel . hidden = mempty+ | otherwise = view axisLabelTextFunction rA rLabelAlign rTxt+ # translate rLabelPos+ # applyStyle (rA ^. axisLabelStyle)+ # fc black++ rLabelPos = V2 (s*x) (- view axisLabelGap rA) where+ x = case rA ^. axisLabelPosition of+ MiddleAxisLabel -> r/2+ LowerAxisLabel -> 0+ UpperAxisLabel -> r+ rTxt = rA ^. axisLabelText+ rLabelAlign = BaselineText++ -- Radial ticks ------------------------------------------------------++ -- The positions of major and minor ticks along the radial axis+ majorTickRs = view majorTicksFunction rA (0,r)+ majorTickRs' = map (*s) $ filter rInRange majorTickRs+ minorTickRs = view minorTicksFunction rA majorTickRs (0,r)+ minorTickRs' = map (*s) $ filter rInRange minorTickRs++ -- Major and minor ticks are placed along the line at the calculated+ -- positions majorTickRs+ rAxTicks = rAxMajorTicks <> rAxMinorTicks+ rAxMajorTicks+ | rA ^. majorTicks . hidden = mempty+ | otherwise = foldMap (\x -> rAxMajorTick # translateX x) majorTickRs'+ # applyStyle (rA ^. majorTicksStyle)+ rAxMinorTicks+ | rA ^. minorTicks . hidden = mempty+ | otherwise = foldMap (\x -> rAxMinorTick # translateX x) minorTickRs'+ # applyStyle (rA ^. minorTicksStyle)++ -- The paths used for individual major and minor ticks+ rAxMajorTick = someTick (rA ^. majorTicksAlignment) (rA ^. majorTicksLength)+ rAxMinorTick = someTick (rA ^. minorTicksAlignment) (rA ^. minorTicksLength)++ someTick tType d = case tType of+ TickSpec (fromRational -> aa) (fromRational -> bb)+ -> mkP2 0 (-d*bb) ~~ mkP2 0 (d*aa)+ AutoTick -> mkP2 0 (-d) ~~ mkP2 0 d++ -- Radial grid lines -------------------------------------------------++ rAxGridLines+ -- - | rA ^. gridLines . hidden = mempty+ | otherwise = rMajorGridLines <> rMinorGridLines++ majorGridRs = view majorGridLinesFunction rA majorTickRs (0,r)+ majorGridRs' = map (*s) $ filter rInRange majorGridRs++ rMajorGridLines :: QDiagram b V2 n Any+ rMajorGridLines+ | rA ^. majorGridLines . hidden = mempty+ | otherwise = foldMap circle (filter (>0) majorGridRs')+ # applyStyle (rA ^. majorGridLinesStyle)++ minorGridRs = view minorGridLinesFunction rA minorTickRs (0,r)+ minorGridRs' = map (*s) $ filter rInRange minorGridRs+ rMinorGridLines :: QDiagram b V2 n Any+ rMinorGridLines+ | rA ^. minorGridLines . hidden = mempty+ | otherwise = foldMap circle (filter (>0) minorGridRs')+ # applyStyle (rA ^. minorGridLinesStyle)++ -- Radial tick labels ------------------------------------------------++ rAxTickLabels :: QDiagram b V2 n Any+ rAxTickLabels+ | rA ^. tickLabel . hidden = mempty+ | otherwise = foldMap rDrawTickLabel tickLabelRs++ -- The positions of the tick labels.+ tickLabelRs :: [(n, String)]+ tickLabelRs = view tickLabelFunction rA (filter rInRange majorTickRs) (0,r)++ -- Draw a single tick label given the position and the string to use+ rDrawTickLabel :: (n,String) -> QDiagram b V2 n Any+ rDrawTickLabel (x,label) =+ view tickLabelTextFunction rA (BoxAlignedText 0.5 1) label+ # translate (V2 (s*x) (- view axisLabelGap rA))+ # applyStyle (rA ^. tickLabelStyle)+ # fc black++ ----------------------------------------------------------------------+ -- Angular axis+ ----------------------------------------------------------------------++ -- The angular axis is a circular line around the perimieter of the+ -- polar plot. The Ticks and tick labels are placed around this+ -- perimeter. The Grid lines go from the perimeter to the center.+ thetaAx+ | thetaA ^. hidden = mempty+ | otherwise = thetaAxLine <> thetaAxLabel+ <> thetaAxTicks <> thetaAxTickLabels <> thetaAxGridLines++ theta = 2*pi+ thetaAxLine = line # whenever (thetaA ^. axisLine . hidden) phantom+ where+ -- XXX for now the radial axis is on the theta=0 line. Need some+ -- way to change this+ line = circle (s*r) # applyStyle (thetaA^.axisLineStyle)++ -- Angular axis label ------------------------------------------------++ -- Where should the label go?+ thetaAxLabel+ | null thetaTxt || thetaA ^. axisLabel . hidden = mempty+ | otherwise = view axisLabelTextFunction thetaA thetaLabelAlign thetaTxt+ # translate thetaLabelPos+ # applyStyle (thetaA ^. axisLabelStyle)+ # fc black++ -- thetaLabelPos = V2 (s*x) (- view axisLabelGap thetaA) where+ thetaLabelPos = view xy_ (mkPolar (s*r + view axisLabelGap thetaA) x) where+ -- The angle on the axis the label is placed, doesn't make much+ -- sense right now.+ x = case thetaA ^. axisLabelPosition of+ MiddleAxisLabel -> quarterTurn+ LowerAxisLabel -> zero+ UpperAxisLabel -> halfTurn+ thetaTxt = thetaA ^. axisLabelText+ thetaLabelAlign = BaselineText++ -- Angular axis ticks ------------------------------------------------++ -- The positions of major and minor ticks along the angular axis+ majorTickThetas = view majorTicksFunction thetaA (0,theta)+ majorTickThetas' = filter thetaInRange majorTickThetas+ minorTickThetas = view minorTicksFunction thetaA majorTickThetas (0,theta)+ minorTickThetas' = filter thetaInRange minorTickThetas++ -- Major and minor ticks are placed along perimeter, facing the center+ -- of the axis. Ticks start of horizonal and are rotated to the+ -- correct position on the axis.+ thetaAxTicks = thetaAxMajorTicks <> thetaAxMinorTicks+ thetaAxMajorTicks+ | thetaA ^. majorTicks . hidden = mempty+ | otherwise = foldMap (\phi -> thetaAxMajorTick # translateX (s*r) # rotate (phi@@rad)) majorTickThetas'+ # applyStyle (thetaA ^. majorTicksStyle)+ thetaAxMinorTicks+ | thetaA ^. minorTicks . hidden = mempty+ | otherwise = foldMap (\phi -> thetaAxMinorTick # translateX (s*r) # rotate (phi@@rad)) minorTickThetas'+ # applyStyle (thetaA ^. minorTicksStyle)++ -- The paths used for individual major and minor ticks+ thetaAxMajorTick = someThetaTick (thetaA ^. majorTicksAlignment) (thetaA ^. majorTicksLength)+ thetaAxMinorTick = someThetaTick (thetaA ^. minorTicksAlignment) (thetaA ^. minorTicksLength)++ someThetaTick tType d = case tType of+ TickSpec (fromRational -> aa) (fromRational -> bb)+ -> mkP2 (-d*bb) 0 ~~ mkP2 (d*aa) 0+ AutoTick -> mkP2 (-d) 0 ~~ mkP2 d 0++ -- Angular grid lines ------------------------------------------------++ -- grid lines go from the centre of the axis to the perimeter+ thetaAxGridLines+ -- - | thetaA ^. girdLines . hidden = mempty+ | otherwise = thetaMajorGridLines <> thetaMinorGridLines++ majorGridThetas = view majorGridLinesFunction thetaA majorTickThetas (0,theta)+ majorGridThetas' = filter thetaInRange majorGridThetas++ thetaMajorGridLines :: QDiagram b V2 n Any+ thetaMajorGridLines+ | thetaA ^. majorGridLines . hidden = mempty+ | otherwise = foldMap (\phi -> origin ~~ mkP2 r 0 # rotate (phi@@rad)) majorGridThetas'+ # transform t+ # applyStyle (thetaA ^. majorGridLinesStyle)++ minorGridThetas = view minorGridLinesFunction thetaA minorTickThetas (0,theta)+ minorGridThetas' = filter thetaInRange minorGridThetas+ thetaMinorGridLines :: QDiagram b V2 n Any+ thetaMinorGridLines+ | thetaA ^. minorGridLines . hidden = mempty+ | otherwise = foldMap (\phi -> origin ~~ mkP2 r 0 # rotate (phi@@rad)) minorGridThetas'+ # transform t+ # applyStyle (thetaA ^. minorGridLinesStyle)++ -- Angular tick labels -----------------------------------------------++ thetaAxTickLabels :: QDiagram b V2 n Any+ thetaAxTickLabels+ | thetaA ^. tickLabel . hidden = mempty+ | otherwise = foldMap thetaDrawTickLabel tickLabelThetas++ -- The positions of the tick labels.+ tickLabelThetas :: [(n, String)]+ tickLabelThetas = view tickLabelFunction thetaA majorTickThetas' (0,theta)++ -- Draw a single tick label given the position and the string to use+ thetaDrawTickLabel :: (n, String) -> QDiagram b V2 n Any+ thetaDrawTickLabel (x,label) =+ view tickLabelTextFunction thetaA a label+ # translate v+ # applyStyle (thetaA ^. tickLabelStyle)+ # fc black+ where v = mkPolar (s*r + view axisLabelGap thetaA) (x@@rad) ^. xy_+ -- a = BoxAlignedText (0.5-cos x/2) (0.5-sin x/2)+ a = BoxAlignedText 0.5 0.5++ -- line+ -- | a ^. axisLine . hidden = mempty+ -- | otherwise = foldMap mkline (map snd ys) -- merge with ticks?+ -- # transform t+ -- # stroke+ -- -- # applyStyle (a ^. axisLine e . axisArrowOpts . _Just . shaftStyle)+ -- # lineCap LineCapSquare+ -- where+ -- -- TODO: Arrow for R3+ -- mkline y = pathFromVertices+ -- $ map (\x -> over lensP ((el e .~ x) . (el eO .~ y)) p) [x0, x1] :: Path v n
+ src/Plots/Axis/Scale.hs view
@@ -0,0 +1,290 @@+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Scale+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Determine how to scale an axis.+--+----------------------------------------------------------------------------++module Plots.Axis.Scale+ ( -- * Axis scale+ AxisScaling+ , ScaleMode (..)+ , UniformScaleStrategy (..)+ , Extending (..)+ , noExtend+ , HasAxisScaling (..)++ -- ** Log scales+ , LogScale (..)+ , logNumber+ , logPoint+ , logDeform++ -- * Low level calculations+ -- | These functions are used by "Plots.Axis.Render".+ , calculateBounds+ , calculateScaling++ ) where++import Control.Applicative+import Control.Lens+import Data.Bool+import Data.Default+import Data.Distributive+import Data.Maybe++import Diagrams+import Linear++------------------------------------------------------------------------+-- Axis scale+------------------------------------------------------------------------++-- | How the axis should be scaled when not all dimensions are set.+data ScaleMode+ = AutoScale+ | NoScale+ | Stretch+ | UniformScale UniformScaleStrategy+ deriving (Show, Read)++-- | ?+data UniformScaleStrategy+ = AutoUniformScale+ | UnitOnly+ | ChangeVerticalLimits+ | ChangeHorizontalLimits+ deriving (Show, Read)++-- | Data type used that concerns everything to do with the size or+-- scale of the axis.+data AxisScaling n = Scaling+ { asRatio :: Maybe n+ , asMode :: ScaleMode+ , asEnlarge :: Extending n+ , asBoundMin :: Maybe n+ , asBoundMax :: Maybe n+ , asSize :: Maybe n+ , asLogScale :: LogScale++ -- backup bound in case there's no inferred bounds to go by+ , asBackupBoundMax :: n+ , asBackupBoundMin :: n+ }++type instance N (AxisScaling n) = n++instance Fractional n => Default (AxisScaling n) where+ def = Scaling+ { asRatio = Nothing+ , asMode = AutoScale+ , asEnlarge = RelativeExtend 0.1+ , asBoundMin = Nothing+ , asBoundMax = Nothing+ , asLogScale = def+ , asSize = Just 400+ , asBackupBoundMax = 5+ , asBackupBoundMin = -5+ }++-- | How much to extend the bounds beyond any inferred bounds.+data Extending n+ = AbsoluteExtend n+ | RelativeExtend n+ deriving (Show, Ord, Eq, Functor)++-- | Do not extend the axis beyond the inferred bounds.+noExtend :: Num n => Extending n+noExtend = AbsoluteExtend 0++-- | Class of things that have an 'AxisScaling'.+class HasAxisScaling f a where+ -- | The way to scale in one direction.+ axisScaling :: LensLike' f a (AxisScaling (N a))++ -- | The ratio relative to other axis. If no ratios are set, the ratio+ -- is not enforced. If at least one is set, 'Nothing' ratios are+ -- @1@.+ scaleAspectRatio :: Functor f => LensLike' f a (Maybe (N a))+ scaleAspectRatio = axisScaling . lens asRatio (\as r -> as {asRatio = r})++ -- | The mode to determine how to scale the bounds in a direction.+ -- Choose between 'AutoScale', 'NoScale', 'Stretch' or+ -- 'UniformScale'.+ --+ -- 'Default' is 'AutoScale'.+ scaleMode :: Functor f => LensLike' f a ScaleMode+ scaleMode = axisScaling . lens asMode (\as r -> as {asMode = r})++ -- | Whether the axis uses 'LogAxis' or 'LinearAxis'.+ --+ -- 'Default' is 'LinearAxis'.+ logScale :: Functor f => LensLike' f a LogScale+ logScale = axisScaling . lens asLogScale (\as r -> as {asLogScale = r})++ -- | How much to extend the bounds over infered bounds. This is+ -- ignored if a 'boundMax' or 'boundMin' is set.+ axisExtend :: Functor f => LensLike' f a (Extending (N a))+ axisExtend = axisScaling . lens asEnlarge (\as r -> as {asEnlarge = r})++ -- | The maximum bound the axis. There are helper functions for+ -- setting a minimum bound for a specific axis.+ --+ -- @+ -- 'Plots.Axis.xMin' :: 'Lens'' ('Axis' b 'V2' 'Double') ('Maybe' 'Double')+ -- 'Plots.Axis.yMin' :: 'Lens'' ('Axis' b 'V2' 'Double') ('Maybe' 'Double')+ -- @+ --+ -- Default is 'Nothing'.+ boundMin :: Functor f => LensLike' f a (Maybe (N a))+ boundMin = axisScaling . lens asBoundMin (\as b -> as {asBoundMin = b})++ -- | The maximum bound the axis. There are helper functions for+ -- setting a maximum bound specific axis.+ --+ -- @+ -- 'Plots.Axis.xMax' :: 'Lens'' ('Axis' b 'V2' 'Double') ('Maybe' 'Double')+ -- 'Plots.Axis.yMax' :: 'Lens'' ('Axis' b 'V2' 'Double') ('Maybe' 'Double')+ -- 'Plots.Axis.rMax' :: 'Lens'' ('Axis' b 'Polar 'Double') ('Maybe' 'Double')+ -- @+ --+ -- Default is 'Nothing'.+ boundMax :: Functor f => LensLike' f a (Maybe (N a))+ boundMax = axisScaling . lens asBoundMax (\as b -> as {asBoundMax = b})++ -- | The size of the rendered axis. Default is @'Just' 400@.+ renderSize :: Functor f => LensLike' f a (Maybe (N a))+ renderSize = axisScaling . lens asSize (\as s -> as {asSize = s})++ -- -- backup bound in case there's no inferred bounds to go by+ -- asBackupBoundMax :: n+ -- asBackupBoundMax :: n++asSizeSpec :: (HasLinearMap v, Num n, Ord n) => Lens' (v (AxisScaling n)) (SizeSpec v n)+asSizeSpec = column renderSize . iso mkSizeSpec getSpec++instance HasAxisScaling f (AxisScaling n) where+ axisScaling = id++-- calculating bounds --------------------------------------------------++-- | Calculating the bounds for an axis.+calculateBounds+ :: OrderedField n+ => AxisScaling n -- ^ Scaling to use for this axis+ -> Maybe (n, n) -- ^ Inferred bounds (from any plots)+ -> (n, n) -- ^ Lower and upper bounds to use for this axis+calculateBounds Scaling {..} mInferred = (l', u') where+ -- bounds are only enlarged when min/max bound wasn't set+ l' = l & whenever (isNothing asBoundMin) (subtract x)+ & whenever (asLogScale == LogAxis) (max 1e-6)+ u' = u & whenever (isNothing asBoundMax) (+ x)++ -- amount to enlarge axis by+ x = case asEnlarge of+ AbsoluteExtend a -> a+ RelativeExtend a -> (u - l) * a++ -- pre-enlarged bounds are looked at in the following order:+ -- - concrete bounds from max/boundMin+ -- - inferred bounds from plot envelopes+ -- - backup bounds+ l = fromMaybe asBackupBoundMin $ asBoundMin <|> lI+ u = fromMaybe asBackupBoundMax $ asBoundMax <|> uI+ lI = preview (folded . _1) mInferred+ uI = preview (folded . _2) mInferred++-- | Calculate the scaling for the axis.+--+-- The result returns:+--+-- - The final bounds for the axis+-- - scale to match desired 'scaleAspectRatio'+-- - scale to match desired 'asSizeSpec'+calculateScaling+ :: (HasLinearMap v, OrderedField n, Applicative v)+ => v (AxisScaling n) -- ^ axis scaling options+ -> BoundingBox v n -- ^ bounding box from the axis plots+ -> (v (n,n), Transformation v n, Transformation v n)+calculateScaling aScaling bb = (bounds, aspectScaling, sizeScaling) where++ -- final bounds of the axis+ bounds = calculateBounds <$> aScaling <*> distribute inferred+ inferred = view _Point . uncurry (liftA2 (,)) <$> getCorners bb++ -- the scaling used to meet the desired aspect ratio+ aspectScaling+ -- If any of the aspect ratios are committed we use the aspect ratio from+ -- aScaling. Otherwise no ratios are set, ignore them and scale+ -- such that each axis is the same length+ | anyOf (folded . scaleAspectRatio) isJust aScaling+ = vectorScaling $ view (scaleAspectRatio . non 1) <$> aScaling+ | otherwise = inv $ vectorScaling v++ -- scaling used so the axis fits in the size spec+ sizeScaling = requiredScaling szSpec v'+ -- the vector that points from the lower bound to the upper bound of the+ -- axis+ v = uncurry (flip (-)) <$> bounds+ v' = apply aspectScaling v+ szSpec = view asSizeSpec aScaling++-- | Scale transformation using the respective scale coefficients in the vector.+vectorScaling :: (Additive v, Fractional n) => v n -> Transformation v n+vectorScaling v = fromLinear f f+ where f = liftI2 (*) v <-> liftI2 (flip (/)) v++-- | Apply a function if the predicate is true.+whenever :: Bool -> (a -> a) -> a -> a+whenever b f = bool id f b++-- Logarithmic scaling -------------------------------------------------++-- Logarithmic scales are achieved by having 'LinearAxis' or 'LogAxis'+-- for each of the axes. When rendering the plots, they have axes the+-- log scheme. Some plots (like scatter) can easily do this whereas+-- others (like diagram plot) it's nearly impossible for, so they don't+-- bother.+--+-- Support for Log axis still needs a lot of work and debugging.++-- | Should the axis be on a logarithmic scale. The 'Default' is+-- 'LinearAxis'.+data LogScale = LinearAxis | LogAxis+ deriving (Show, Eq)++instance Default LogScale where+ def = LinearAxis++-- | Log the number for 'LogAxis', do nothing for 'LinearAxis'.+logNumber :: Floating a => LogScale -> a -> a+logNumber LinearAxis = id+logNumber LogAxis = log+{-# INLINE logNumber #-}++-- | Transform a point according to the axis scale. Does nothing for+-- linear scales.+logPoint :: (Additive v, Floating n) => v LogScale -> Point v n -> Point v n+logPoint v = _Point %~ liftI2 logNumber v+{-# INLINE logPoint #-}++-- | Deform an object according to the axis scale. Does nothing for+-- linear scales.+logDeform :: (InSpace v n a, Foldable v, Floating n, Deformable a a)+ => v LogScale -> a -> a+logDeform v+ | allOf folded (== LinearAxis) v = id+ | otherwise = deform (Deformation $ logPoint v)+
+ src/Plots/Axis/Ticks.hs view
@@ -0,0 +1,375 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Ticks+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- Ticks for being placed on an axis or a 'ColourBar'.+--+----------------------------------------------------------------------------+module Plots.Axis.Ticks+ ( -- * Major ticks+ MajorTicks+ , HasMajorTicks (..)+ , majorTicksHelper+ , logMajorTicks++ -- * Minor ticks+ , MinorTicks+ , HasMinorTicks (..)+ , minorTicksHelper++ -- * Both major and minor ticks+ , Ticks+ , HasTicks (..)+ , ticksAlign+ , ticksStyle+ , ticksVisible++ -- * Tick alignment+ , TicksAlignment (..)+ , autoTicks+ , centreTicks+ , centerTicks+ , insideTicks+ , outsideTicks++ -- * Helper functions+ , hideTicks+ , majorTickPositions+ , minorTickPositions+ , linearMajorTicks+ ) where++import Control.Lens hiding (transform, ( # ))+import Data.Data+import Data.Default+import Data.Foldable as F+import Data.Ord+import Plots.Types+import Plots.Util++import Diagrams.Prelude++------------------------------------------------------------------------+-- Types+------------------------------------------------------------------------++-- Tick alignment ------------------------------------------------------++-- | Set the portion of the tick above and below the axis.+data TicksAlignment+ = TickSpec !Rational !Rational+ | AutoTick -- center tick for middle axis, outside tick otherwise+ deriving (Show, Eq)++-- | Set the tick type depending on the axis line position. 'centreTick'+-- for 'middleAxis', 'insideTick' for everything else.+autoTicks :: TicksAlignment+autoTicks = AutoTick++-- | Set the tick to be in the centre of the axis with total length of+-- the corresponding tick length.+centreTicks :: TicksAlignment+centreTicks = TickSpec 0.5 0.5++-- | Synonym for 'centreTicks'.+centerTicks :: TicksAlignment+centerTicks = centreTicks++-- | Align the ticks to be inside a box axis.+insideTicks :: TicksAlignment+insideTicks = TickSpec 0 1++-- | Align the ticks to be outside a box axis.+outsideTicks :: TicksAlignment+outsideTicks = TickSpec 1 0++-- -- | Do not show any ticks.+-- noTicks :: TicksAlignment+-- noTicks = NoTick++------------------------------------------------------------------------+-- Minor ticks+------------------------------------------------------------------------++-- | The big ticks on the axis line.+data MajorTicks v n = MajorTicks+ { matFunction :: (n,n) -> [n]+ , matAlign :: TicksAlignment+ , matLength :: n+ , matStyle :: Style v n+ , matVisible :: Bool+ }++instance TypeableFloat n => Default (MajorTicks v n) where+ def = MajorTicks+ { matFunction = linearMajorTicks 5+ , matAlign = autoTicks+ , matLength = 5+ , matStyle = mempty # lwO 0.4+ , matVisible = True+ }++type instance V (MajorTicks v n) = v+type instance N (MajorTicks v n) = n++-- | Class of things that have a 'MajorTicks'.+class HasMajorTicks f a where+ -- | Lens onto the 'MajorTicks' of something.+ majorTicks :: LensLike' f a (MajorTicks (V a) (N a))++ -- | The function used to place ticks for this axis, given the bounds+ -- of the axis. The result of these major ticks are also used as+ -- guides for 'MinorTicks', 'MajorGridLines' and 'MinorGridLines'.+ --+ -- Default is @'linearMinorTicks' 5@.+ majorTicksFunction :: Functor f => LensLike' f a ((N a, N a) -> [N a])+ majorTicksFunction = majorTicks . lens matFunction (\mat a -> mat {matFunction = a})++ -- | Alignment of the major ticks. Choose between 'autoTicks'+ -- (default), 'centreTicks', 'insideTicks' or 'outsideTicks'.+ majorTicksAlignment :: Functor f => LensLike' f a TicksAlignment+ majorTicksAlignment = majorTicks . lens matAlign (\mat a -> mat {matAlign = a})++ -- | The total length the major ticks.+ --+ -- Default is @7@.+ majorTicksLength :: Functor f => LensLike' f a (N a)+ majorTicksLength = majorTicks . lens matLength (\mat a -> mat {matLength = a})++ -- | The style used to render the major ticks.+ --+ -- Default is @'lwO' 0.6 'mempty'@ (subject to change).+ majorTicksStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ majorTicksStyle = majorTicks . lens matStyle (\mat sty -> mat {matStyle = sty})++instance HasMajorTicks f (MajorTicks v n) where+ majorTicks = id++instance HasVisibility (MajorTicks v n) where+ visible = lens matVisible (\mat b -> mat {matVisible = b})++------------------------------------------------------------------------+-- Minor ticks+------------------------------------------------------------------------++-- | The small ticks on the axis line.+data MinorTicks v n = MinorTicks+ { mitFunction :: [n] -> (n,n) -> [n]+ , mitAlign :: TicksAlignment+ , mitLength :: n+ , mitStyle :: Style v n+ , mitVisible :: Bool+ }++type instance V (MinorTicks v n) = v+type instance N (MinorTicks v n) = n++instance TypeableFloat n => Default (MinorTicks v n) where+ def = MinorTicks+ { mitFunction = minorTicksHelper 4+ , mitAlign = autoTicks+ , mitLength = 3+ , mitStyle = mempty # lwO 0.4+ , mitVisible = True+ }++-- | Class of things that have a single 'MinorTicks'.+class HasMinorTicks f a where+ -- | Lens onto the 'MinorTicks' of something.+ minorTicks :: LensLike' f a (MinorTicks (V a) (N a))++ -- | The function used to place ticks for this axis, given the result+ -- of 'majorTicksFunction' and the bounds of the axis.+ --+ -- Default is @'linearMinorTicks' 3@.+ minorTicksFunction :: Functor f => LensLike' f a ([N a] -> (N a, N a) -> [N a])+ minorTicksFunction = minorTicks . lens mitFunction (\mit a -> mit {mitFunction = a})++ -- | Alignment of the minor ticks. Choose between 'autoTicks'+ -- (default), 'centreTicks', 'insideTicks' or 'outsideTicks'.+ minorTicksAlignment :: Functor f => LensLike' f a TicksAlignment+ minorTicksAlignment = minorTicks . lens mitAlign (\mit a -> mit {mitAlign = a})++ -- | The total length the minor ticks.+ --+ -- Default is @3@.+ minorTicksLength :: Functor f => LensLike' f a (N a)+ minorTicksLength = minorTicks . lens mitLength (\mit a -> mit {mitLength = a})++ -- | The style used to render the minor ticks.+ --+ -- Default is @'lwO' 0.4 'mempty'@ (subject to change).+ minorTicksStyle :: Functor f => LensLike' f a (Style (V a) (N a))+ minorTicksStyle = minorTicks . lens mitStyle (\mit sty -> mit {mitStyle = sty})++instance HasMinorTicks f (MinorTicks v n) where+ minorTicks = id++instance HasVisibility (MinorTicks v n) where+ visible = lens mitVisible (\mit sty -> mit {mitVisible = sty})++------------------------------------------------------------------------+-- Both ticks+------------------------------------------------------------------------++-- | Both 'MajorTicks' and 'MinorTicks' together.+data Ticks v n = Ticks (MajorTicks v n) (MinorTicks v n)+-- Ticks are originally split up into major and minor so we can reuse+-- major for the colour bar. I'm still undecided whether it's worth all+-- the extra boilerplate here.++type instance V (Ticks v n) = v+type instance N (Ticks v n) = n++-- | Class of things with both 'MajorTicks' and 'MinorTicks'.+class (HasMinorTicks f a, HasMajorTicks f a) => HasTicks f a where+ bothTicks :: LensLike' f a (Ticks (V a) (N a))++instance Functor f => HasTicks f (Ticks v n) where+ bothTicks = id++instance Functor f => HasMajorTicks f (Ticks v n) where+ majorTicks f (Ticks ma mi) = f ma <&> \ma' -> Ticks ma' mi++instance Functor f => HasMinorTicks f (Ticks v n) where+ minorTicks f (Ticks ma mi) = f mi <&> \mi' -> Ticks ma mi'++instance TypeableFloat n => Default (Ticks v n) where+ def = Ticks def def++instance Typeable n => HasStyle (Ticks v n) where+ applyStyle s = over ticksStyle (applyStyle s)++-- | Traversal over both major and minor tick alignment.+ticksAlign :: (HasTicks f a, Applicative f) => LensLike' f a TicksAlignment+ticksAlign = bothTicks . aligns+ where+ aligns f a = (\m mn -> a & majorTicksAlignment .~ m & minorTicksAlignment .~ mn)+ <$> f (a ^. majorTicksAlignment) <*> f (a ^. minorTicksAlignment)++-- | Traversal over both major and minor tick styles.+ticksStyle :: (HasTicks f a, Applicative f) => LensLike' f a (Style (V a) (N a))+ticksStyle = bothTicks . styles+ where+ styles f a = (\m mn -> a & majorTicksStyle .~ m & minorTicksStyle .~ mn)+ <$> f (a ^. majorTicksStyle) <*> f (a ^. minorTicksStyle)++-- | Traversal over the visibility of both major and minor ticks.+ticksVisible :: (HasTicks f a, Applicative f) => LensLike' f a Bool+ticksVisible = bothTicks . visibles+ where+ visibles f a = (\m mn -> a & majorTicks . visible .~ m & minorTicks. visible .~ mn)+ <$> f (a ^. majorTicks . visible) <*> f (a ^. minorTicks . visible)++-- | Hides the 'Minor' ticks when trying to render something. This can+-- be used on multiple types:+--+-- @+-- 'hideTicks' :: 'Axis' b c n -> 'Axis' b c n+-- 'hideTicks' :: 'SingleAxis' b v n -> 'SingleAxis' b v n+-- 'hideTicks' :: 'Ticks' v n -> 'Ticks' v n+-- 'hideTicks' :: 'MinorTicks' v n -> 'MinorTicks' v n+-- @+hideTicks :: HasTicks Identity a => a -> a+hideTicks = ticksVisible .~ False++-- | Setter over the final positions the major ticks. This is not as+-- general as 'majorTicksFunction' because you don't have access to+-- the bounds but it can be useful when you know exactly what ticks+-- you want to add or modify existing tick positions.+majorTickPositions+ :: (HasMajorTicks f a, Settable f)+ => LensLike' f a [N a]+majorTickPositions = majorTicksFunction . mapped++-- | Setter over the final positions the major ticks. This is not as+-- general as 'minorTicksFunction' because you don't have access to+-- the bounds but it can be useful when you know exactly what ticks+-- you want to add or modify existing tick positions.+minorTickPositions+ :: (HasMinorTicks f a, Settable f)+ => LensLike' f a [N a]+minorTickPositions = minorTicksFunction . mapped . mapped++------------------------------------------------------------------------+-- Calculating ticks+------------------------------------------------------------------------++-- Linear ticks --------------------------------------------------------++-- | Ticks whose value ends in 1, 0.5, 0.25, 0.2 (*10^n).+linearMajorTicks :: (RealFrac n, Floating n) => n -> (n, n) -> [n]+linearMajorTicks = majorTicksHelper [1, 0.5, 0.25, 0.2, 0.3]++-- Logarithmic ticks ---------------------------------------------------++-- | Place n ticks at powers of 10 on the axis.+logMajorTicks :: (RealFrac n, Floating n) => n -> (n, n) -> [n]+logMajorTicks n (a,b) =+ -- Logarithmic ticks are just like linear ticks but in a different domain.+ map (10**) $ majorTicksHelper ts n (log10 (max 2 a), log10 b)+ where ts = [1,2,3,4,5,6,7,8,9]++-- Ticks helpers -------------------------------------------------------++-- | Place n linear spaced ticks between each major tick.+minorTicksHelper+ :: Fractional n+ => Int -- ^ Number of minor ticks between each major tick+ -> [n] -- ^ Positions of major ticks+ -> (n, n) -- ^ Bounds+ -> [n] -- ^ Minor tick positions+minorTicksHelper n ts _ = F.concat $ go ts where+ -- we won't want x1 and x2 to be minor ticks too we init/tail them.+ go (x1:x2:xs) = (init . tail) (enumFromToN x1 x2 (n+2)) : go (x2:xs)+ go _ = []++-- | Choose ticks whose step size is a multiple of 10 of the allowed+-- numbers and tries to match the number of desired ticks.+--+-- Note that the resulting tick positions may go out of the range of+-- the bounds. This is so the minor ticks can be chosen correctly if a+-- tick doesn't end exactly on a bound. When we render, we ignore all+-- ticks outside the bounds.+majorTicksHelper+ :: (RealFrac n, Floating n)+ => [n] -- ^ Allowed numbers (up to powers of 10)+ -> n -- ^ desired number of ticks+ -> (n, n) -- ^ bounds+ -> [n] -- ^ tick positions+majorTicksHelper ts0 n (a,b) = iterateN n' (+h) a'+ where+ i = fromIntegral (floor ( a / h ) :: Int)++ a' = i*h+ n' = ceiling ((b - a')/h) + 1++ -- Find the a value from our potential ticks that's closest to our+ -- ideal height.+ h = minimumBy (comparing $ abs . (h' -)) ts'++ -- Ideal height for the desired number of ticks.+ h' = d / n++ -- Potential step heights that look nice and are in a suitable range+ -- for the axis bounds.+ ts' = map (* 10 ^^ (floor $ log10 d :: Int)) (ts0 ++ map (*10) ts0)+ d = abs $ b - a++-- logged :: Floating a => Iso' a a+-- logged = iso log10 (10**)++log10 :: Floating a => a -> a+log10 = logBase 10
+ src/Plots/Axis/Title.hs view
@@ -0,0 +1,112 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeFamilies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Axis.Title+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- The title used for a plot.+--+----------------------------------------------------------------------------+module Plots.Axis.Title+ ( Title+ , HasTitle (..)+ , drawTitle+ ) where++import Data.Default+import Data.Typeable++import Diagrams.Prelude+import Diagrams.TwoD.Text+import Plots.Types++data Title b v n = Title+ { tVisible :: Bool+ , tTxt :: String+ , tTxtFun :: TextAlignment n -> String -> QDiagram b v n Any+ , tStyle :: Style v n+ , tPlacement :: Placement+ , tGap :: n+ } deriving Typeable++instance (Renderable (Text n) b, TypeableFloat n)+ => Default (Title b V2 n) where+ def = Title+ { tVisible = True+ , tTxt = ""+ , tTxtFun = mkText+ , tStyle = mempty # fontSize (output 11)+ , tPlacement = midAbove+ , tGap = 20+ }++type instance V (Title b v n) = v+type instance N (Title b v n) = n++instance HasVisibility (Title b v n) where+ visible = lens tVisible (\t b -> t {tVisible = b})++instance HasGap (Title b v n) where+ gap = lens tGap (\t g -> t {tGap = g})++instance HasPlacement (Title b v n) where+ placement = titlePlacement++class HasTitle a b | a -> b where+ title :: Lens' a (Title b (V a) (N a))++ -- | The text used for the title. If the string is empty, no title is+ -- drawn.+ --+ -- Default is @""@+ titleText :: Lens' a String+ titleText = title . lens tTxt (\t s -> t {tTxt = s})++ -- | The style applied to the title.+ --+ -- Default is 'mempty'.+ titleStyle :: Lens' a (Style (V a) (N a))+ titleStyle = title . lens tStyle (\t s -> t {tStyle = s})++ -- | The placement of the title against the axis.+ --+ -- Default is 'mempty'.+ titlePlacement :: Lens' a Placement+ titlePlacement = title . lens tPlacement (\t s -> t {tPlacement = s})++ -- | The gap between the axis and the title.+ --+ -- Default is 'mempty'.+ titleGap :: Lens' a (N a)+ titleGap = title . lens tGap (\t s -> t {tGap = s})++instance HasTitle (Title b v n) b where+ title = id++-- | Render the title and place it around the bounding box.+drawTitle+ :: TypeableFloat n+ => BoundingBox V2 n+ -> Title b V2 n+ -> QDiagram b V2 n Any+drawTitle bb t+ | t ^. hidden || nullOf titleText t = mempty+ | otherwise = placeAgainst+ bb+ (t ^. titlePlacement)+ (t ^. titleGap)+ tDia+ where+ tDia = tTxtFun t (BoxAlignedText 0.5 0) (tTxt t)+ # applyStyle (tStyle t)+
+ src/Plots/Legend.hs view
@@ -0,0 +1,155 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+module Plots.Legend+ (+ -- * Legend+ Legend+ , HasLegend (..)++ -- * Drawing a legend+ , drawLegend++ ) where++import Control.Lens hiding (none, ( # ))+import Data.Default+import Data.Typeable+import Diagrams.TwoD.Text++import Diagrams.BoundingBox+import Diagrams.Prelude++import Plots.Types++-- | The data type to describe how to draw a legend. For legend entries+-- see 'Plots.Types.LegendEntry'.+data Legend b n = Legend+ { lPlacement :: Placement+ , lGap :: n+ , lStyle :: Style V2 n+ , lSpacing :: n+ , lTextWidth :: n+ , lTextF :: String -> QDiagram b V2 n Any+ , lTextStyle :: Style V2 n+ , lOrientation :: Orientation+ , lVisible :: Bool+ } deriving Typeable++type instance V (Legend b n) = V2+type instance N (Legend b n) = n++class HasLegend a b | a -> b where+ -- | Lens onto the 'Legend' of something.+ legend :: Lens' a (Legend b (N a))++ -- | The 'Placement' of the legend relative to the 'Plots.Axis.Axis'.+ legendPlacement :: Lens' a Placement+ legendPlacement = legend . lens lPlacement (\l a -> l {lPlacement = a})++ -- | The gap between the legend and the axis.+ legendGap :: Lens' a (N a)+ legendGap = legend . lens lGap (\l a -> l {lGap = a})++ -- | The style applied to the surronding box of the legend.+ legendStyle :: Lens' a (Style V2 (N a))+ legendStyle = legend . lens lStyle (\l a -> l {lStyle = a})++ -- | The spacing between entries in the legend.+ legendSpacing :: Lens' a (N a)+ legendSpacing = legend . lens lSpacing (\l a -> l {lSpacing = a})++ -- | The space given for the text in the legend.+ legendTextWidth :: Lens' a (N a)+ legendTextWidth = legend . lens lTextWidth (\l a -> l {lTextWidth = a})++ -- | The function to generate the legend text.+ legendTextFunction :: Lens' a (String -> QDiagram b V2 (N a) Any)+ legendTextFunction = legend . lens lTextF (\l a -> l {lTextF = a})++ -- | The style applied to the legend text.+ legendTextStyle :: Lens' a (Style V2 (N a))+ legendTextStyle = legend . lens lTextStyle (\l a -> l {lTextStyle = a})++ -- | The way the legend entries are listed. (This will likely be+ -- replaced by a grid-like system)+ legendOrientation :: Lens' a Orientation+ legendOrientation = legend . lens lOrientation (\l a -> l {lOrientation = a})++instance HasLegend (Legend b n) b where+ legend = id++instance HasGap (Legend b n) where+ gap = legendGap++instance HasPlacement (Legend b n) where+ placement = legendPlacement++instance (TypeableFloat n, Renderable (Text n) b) => Default (Legend b n) where+ def = Legend+ { lPlacement = rightTop+ , lGap = 20+ , lSpacing = 20+ , lTextWidth = 60+ , lStyle = mempty+ , lTextF = mkText (BoxAlignedText 0 0.5)+ , lTextStyle = mempty & fontSize (output 11)+ , lOrientation = Vertical+ , lVisible = True+ }++instance HasVisibility (Legend b n) where+ visible = lens lVisible (\l a -> l {lVisible = a})++instance TypeableFloat n => HasStyle (Legend b n) where+ applyStyle sty = over legendStyle (applyStyle sty)++instance HasOrientation (Legend b n) where+ orientation = legendOrientation++-- | Draw a legend to the bounding box using the legend entries and+-- legend options.+drawLegend+ :: (TypeableFloat n,+ Renderable (Path V2 n) b)+ => BoundingBox V2 n -- ^ bounding box to place legend against+ -> [(QDiagram b V2 n Any, String)] -- ^ diagram pictures along with their key+ -> Legend b n -- ^ options for drawing the legend+ -> QDiagram b V2 n Any -- ^ rendered legend+drawLegend bb entries l+ | l ^. hidden || null entries = mempty+ | otherwise = placeAgainst+ bb+ (l ^. legendPlacement)+ (l ^. legendGap)+ (ledge <> back)+ where+ w = l ^. legendTextWidth+ h = l ^. legendSpacing+ --+ ledge = map mkLabels entries+ # orient (l ^. legendOrientation) hcat vcat+ # alignTL++ back = rect (w + h + 5) (h * fromIntegral (length entries))+ # fcA transparent+ # applyStyle (l ^. legendStyle)+ # alignTL+ # translate (V2 (-5) 0) -- (-3))++ -- mkLabels :: (QDiagram b V2 n Any, String) -> QDiagram b V2 n Any+ mkLabels (pic, txt) = pic' ||| strutX 5 ||| label where+ pic' = pic # withEnvelope (fromCorners (pure (-h/2)) (pure (h/2)))+ label = view legendTextFunction l txt+ # applyStyle (l ^. legendTextStyle)+ # withEnvelope (fromCorners origin (mkP2 w h) # moveTo (mkP2 0 (-h/2)))++-- wrapPic :: RealFloat n => V2 n -> QDiagram b V2 n Any -> QDiagram b V2 n Any+-- wrapPic ((^/ 2) -> v) d+-- = d # sizedAs (fromCorners (origin .-^ v) (origin .+^ v))
+ src/Plots/Name.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell #-}++module Plots.Name where++import Control.Lens+-- import Data.Map (Map)+import Data.Ord (comparing)+import Data.Function+import Data.Typeable+import Diagrams.Core.Names+import Diagrams.Prelude hiding (view)++data PlotName n = PlotName+ { _plotName :: String+ , _namedSize2D :: SizeSpec V2 n+ , _namedT2 :: T2 n+ } deriving Typeable++makeLenses ''PlotName++instance Show (PlotName n) where+ show pn = "Plot: " ++ view plotName pn++-- equating :: Eq b => (a -> b) -> a -> a -> Bool+-- equating = on (==)++instance Eq (PlotName n) where+ (==) = on (==) (view plotName)++instance Ord (PlotName n) where+ compare = comparing (view plotName)++instance Typeable n => IsName (PlotName n)++-- _AName :: IsName a => Prism' AName a+-- _AName = prism' AName (\(AName a) -> cast a)++-- _Names :: IsName a => Traversal' Name a+-- _Names = _Wrapped' . traverse . _AName++-- _NamedString :: Traversal' Name String+-- _NamedString = _Names++-- _NamedPlot :: Typeable n => Traversal' Name (PlotName n)+-- _NamedPlot = _Names++-- diaNames :: OrderedField n => QDiagram b V2 n Any -> Map Name [P2 n]+-- diaNames = over (mapped . traversed) location . view (subMap . _Wrapped')+
+ src/Plots/Style.hs view
@@ -0,0 +1,1104 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Style+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- This module defines the 'AxisStyle' type along with different colour+-- schemes. 'AxisStyle's are used to provide default colours and shapes+-- for the plots of an axis.+--+----------------------------------------------------------------------------++module Plots.Style+ ( -- * The axis style+ AxisStyle+ , HasAxisStyle (..)+ -- , axisStyles++ -- ** Predefined styles+ , fadedColours+ , vividColours+ , blackAndWhite++ -- * Plot Style+ , PlotStyle+ , HasPlotStyle (..)++ -- ** Applying Plot styles+ , applyLineStyle+ , applyMarkerStyle+ , applyAreaStyle+ , applyTextStyle++ -- * Colour schemes+ , colours1+ , colours2++ -- * Marker shapes+ , asterisk+ , diamond+ , crossShape+ , star'+ , plus+ , lineMarkers++ -- * Colour maps+ , ColourMap+ , ixColour+ , cmTraverse+ , colourMap+ , alphaColourMap+ , colourList+ , toStops++ -- ** Sample maps+ , viridis+ , magma+ , inferno+ , plasma+ , greys++ ) where++-- import Control.Lens hiding (transform, ( # ), at, none)+import qualified Control.Lens as Lens+import Data.Colour.SRGB+import qualified Data.Map as M+import Data.Typeable+import Diagrams.Prelude hiding (magma)+import Linear++-- | Plot styles are used to style each plot in an axis. Every 'Axis'+-- comes with a list of plots styles (contained in the 'AxisStyle')+-- which get applied the plots upon rendering.+--+-- You can either change the list of plot styles used with+-- 'axisStyle':+--+-- @+-- stylishAxis = r2Axis &~ do+-- axisStyle .= vividColours+-- linePlot [(1,2) (3,4)] $ key "line 1"+-- linePlot [(1,1) (4,2)] $ key "line 2"+-- @+--+-- change the style for individual plots when changing the plot state.+--+-- @+-- stylishAxis2 = r2Axis &~ do+-- linePlot [(1,2) (3,4)] $ do+-- key "line 1"+-- plotColour .= green+-- linePlot [(1,1) (4,2)] $ do+-- key "line 2"+-- plotColour .= orange+-- @+--+-- A plot style is made up of separate styles ('lineStyle',+-- 'markerStyle', 'areaStyle' and 'textStyle') a 'plotColour' and a+-- 'plotMarker'. When rendering a plot, the 'PlotStyle's in an+-- 'AxisStyle' are used to style each plot. The lenses can be used to+-- customise each style when adding the plot.+--+-- * 'plotColour' - the underlying colour of the plot+-- * 'lineStyle' - style used for lines ('linePlot', 'connectingLine'+-- in a 'scatterPlot')+-- * 'areaStyle' - style used for any area ('barPlot', 'piePlot',+-- 'histogramPlot')+-- * 'markerStyle' - style used for markers in 'scatterPlot'+-- * 'plotMarker' - marker used in 'scatterPlot'+data PlotStyle b v n = PlotStyle+ { _plotColour :: Colour Double+ , _lineStyle :: Colour Double -> Style v n+ , _markerStyle :: Colour Double -> Style v n+ , _areaStyle :: Colour Double -> Style v n+ , _textStyle :: Colour Double -> Style v n+ , _plotMarker :: QDiagram b v n Any+ } deriving Typeable+ -- XXX link to examples in haddock?++type instance V (PlotStyle b v n) = v+type instance N (PlotStyle b v n) = n++-- | Class for objects that contain a 'PlotStyle'.+class HasPlotStyle f a b | a -> b where+ -- | Lens onto the 'PlotStyle'.+ plotStyle :: LensLike' f a (PlotStyle b (V a) (N a))++ -- | The 'plotColour' is the overall colour of the plot. This is passed+ -- to the other styles ('lineStyle', 'markerStyle' etc.) to give an+ -- overall colour for the plot.+ plotColour :: Functor f => LensLike' f a (Colour Double)+ plotColour = plotStyle . lens _plotColour (\p f -> p {_plotColour = f})++ -- | Alias for 'plotColour'.+ plotColor :: Functor f => LensLike' f a (Colour Double)+ plotColor = plotColour++ -- | This style is applied to any plots made up of lines only (like+ -- 'Path' plots). This is a less general version of+ -- 'lineStyleFunction'.+ lineStyle :: Settable f => LensLike' f a (Style (V a) (N a))+ lineStyle = lineStyleFunction . mapped++ -- | A version 'lineStyle' with access to the current 'plotColour'+ -- when 'applyLineStyle' is used.+ lineStyleFunction :: Functor f => LensLike' f a (Colour Double ->+ Style (V a) (N a))+ lineStyleFunction = plotStyle . lens _lineStyle (\p f -> p {_lineStyle = f})++ -- | This style is applied to any markers in the plot (usually the+ -- 'plotMarker'). This is a less general version of+ -- 'markerStyleFunction'.+ markerStyle :: Settable f => LensLike' f a (Style (V a) (N a))+ markerStyle = markerStyleFunction . mapped++ -- | A version 'lineStyle' with access to the current 'plotColour' when+ -- 'applyMarkerStyle' is used.+ markerStyleFunction :: Functor f => LensLike' f a (Colour Double -> Style (V a) (N a))+ markerStyleFunction = plotStyle . lens _markerStyle (\p f -> p {_markerStyle = f})++ -- | This style is applied to any filled areas in a plot (like+ -- 'Plots.Types.Bar' or 'Plots.Styles.Ribbon'). This is a less+ -- general version of 'areaStyleFunction'.+ areaStyle :: Settable f => LensLike' f a (Style (V a) (N a))+ areaStyle = areaStyleFunction . mapped++ -- | A version 'areaStyle' with access to the current 'plotColour' when+ -- 'applyAreaStyle' is used.+ areaStyleFunction :: Functor f => LensLike' f a (Colour Double -> Style (V a) (N a))+ areaStyleFunction = plotStyle . lens _areaStyle (\p f -> p {_areaStyle = f})++ -- | This style is applied to text plots. This is a less general+ -- version of 'textStyleFunction'.+ textStyle :: Settable f => LensLike' f a (Style (V a) (N a))+ textStyle = textStyleFunction . mapped++ -- | A version 'textStyle' with access to the current 'plotColour' when+ -- 'applyAreaStyle' is used.+ textStyleFunction :: Functor f => LensLike' f a (Colour Double -> Style (V a) (N a))+ textStyleFunction = plotStyle . lens _textStyle (\p f -> p {_textStyle = f})++ -- | This diagram is used as any markers in a plot (like+ -- 'Plots.Types.Scatter'). The 'markerStyle' will be applied to this+ -- marker when the plot gets rendered.+ plotMarker :: Functor f => LensLike' f a (QDiagram b (V a) (N a) Any)+ plotMarker = plotStyle . lens _plotMarker (\p f -> p {_plotMarker = f})++ -- | A traversal over all the styles ('lineStyle', 'markerStyle',+ -- 'areaStyle' and 'textStyle') of a 'PlotStyle'. This is a less+ -- general version of 'plotStyleFunctions'.+ plotStyles :: Settable f => LensLike' f a (Style (V a) (N a))+ plotStyles = plotStyleFunctions . mapped++ -- | A version of 'plotStyles' with access to the 'plotColour'.+ plotStyleFunctions :: Applicative f => LensLike' f a (Colour Double -> Style (V a) (N a))+ plotStyleFunctions = plotStyle . t+ where+ t f PlotStyle {..} = PlotStyle+ <$> pure _plotColour+ <*> f _lineStyle+ <*> f _markerStyle+ <*> f _areaStyle+ <*> f _textStyle+ <*> pure _plotMarker++instance HasPlotStyle f (PlotStyle b v n) b where+ plotStyle = id++-- Applying styles -----------------------------------------------------++-- | Apply the 'lineStyle' from a 'PlotStyle'.+--+-- @+-- applyLineStyle :: (InSpace v n t, HasStyle t) => PlotStyle b v n -> t -> t+-- @+applyLineStyle+ :: (SameSpace a t, HasPlotStyle (Const (PlotStyle b (V a) (N a))) a b, HasStyle t)+ => a -> t -> t+applyLineStyle (view plotStyle -> sty) =+ applyStyle $ (sty ^. lineStyleFunction) (sty ^. plotColour)++-- | Apply the 'markerStyle' from a 'PlotStyle'.+--+-- @+-- applyMarkerStyle :: (InSpace v n t, HasStyle t) => PlotStyle b v n -> t -> t+-- @+applyMarkerStyle+ :: (SameSpace a t, HasPlotStyle (Const (PlotStyle b (V a) (N a))) a b, HasStyle t)+ => a -> t -> t+applyMarkerStyle (view plotStyle -> sty) =+ applyStyle $ (sty ^. markerStyleFunction) (sty ^. plotColour)++-- | Apply the 'areaStyle from a 'PlotStyle'.+--+-- @+-- applyLineStyle :: (InSpace v n t, HasStyle t) => PlotStyle b v n -> t -> t+-- @+applyAreaStyle+ :: (SameSpace a t, HasPlotStyle (Const (PlotStyle b (V a) (N a))) a b, HasStyle t)+ => a -> t -> t+applyAreaStyle (view plotStyle -> sty) =+ applyStyle $ (sty ^. areaStyleFunction) (sty ^. plotColour)++-- | Apply the 'textStyle' from a 'PlotStyle'.+--+-- @+-- applyTextStyle :: (InSpace v n t, HasStyle t) => PlotStyle b v n -> t -> t+-- @+applyTextStyle+ :: (SameSpace a t, HasPlotStyle (Const (PlotStyle b (V a) (N a))) a b, HasStyle t)+ => a -> t -> t+applyTextStyle (view plotStyle -> sty) =+ applyStyle $ (sty ^. textStyleFunction) (sty ^. plotColour)++instance (Metric v, Traversable v, OrderedField n) => Transformable (PlotStyle b v n) where+ transform t = (plotMarker %~ transform t) . (plotStyles %~ transform t)++------------------------------------------------------------------------+-- Axis Style+------------------------------------------------------------------------++-- | The 'AxisStyle' determines the 'Style's of the plots in an axis.+-- There are various predifined styles to change the look of the plot.+data AxisStyle b v n = AxisStyle ColourMap [PlotStyle b v n]++type instance V (AxisStyle b v n) = v+type instance N (AxisStyle b v n) = n++-- | Class of things that have an 'AxisStyle'.+class HasAxisStyle a b | a -> b where+ -- | Lens onto the 'AxisStyle'.+ axisStyle :: Lens' a (AxisStyle b (V a) (N a))++ -- | The 'ColourMap' is used to draw the 'Plots.Axis.ColourBar' and+ -- render plots like 'Plots.HeatMap'.+ axisColourMap :: Lens' a ColourMap+ axisColourMap = axisStyle . cm+ where cm f (AxisStyle c ss) = f c <&> \c' -> AxisStyle c' ss++ -- | Traversal over the 'PlotStyle's in an 'AxisStyle'. There are always+ -- an infinite number of 'PlotStyle's in an 'AxisStyle'.+ axisStyles :: IndexedTraversal' Int a (PlotStyle b (V a) (N a))+ axisStyles = axisStyle . stys . traversed+ where stys f (AxisStyle c ss) = f ss <&> \ss' -> AxisStyle c ss'++instance HasAxisStyle (AxisStyle b v n) b where+ axisStyle = id++instance Applicative f => HasPlotStyle f (AxisStyle b v n) b where+ plotStyle = axisStyles++------------------------------------------------------------------------+-- Predefined themes+------------------------------------------------------------------------++-- $predefined+-- There are only a few themes for now. Eventually there will be a wider+-- range of themes with better support for customisation.++-- code to display axis styles+-- > import Plots+-- > showcase :: AxisStyle B V2 Double -> Diagram B+-- > showcase sty = hsep 0.4 . take 8 $ map drawSty stys+-- > where+-- > stys = sty ^.. axisStyles+-- > drawSty s = applyMarkerStyle s (s^.plotMarker) <> applyLineStyle s lineBehind+-- > lineBehind = (p2 (-1,0) ~~ p2 (1,0))+--+-- > fadedColourPic = showcase fadedColours+-- > vividColourPic = showcase vividColours+-- > blackAndWhitePic = showcase blackAndWhite++-- | Theme using 'funColours' with faded fills and thick lines.+--+-- <<diagrams/src_Plots_Style_fadedColourPic.svg#diagram=fadedColourPic&width=600>>+fadedColours :: (TypeableFloat n, Renderable (Path V2 n) b) => AxisStyle b V2 n+fadedColours = AxisStyle viridis $+ zipWith mkStyle (cycle colours1) (cycle $ map stroke filledMarkers)+ where+ mkStyle c = PlotStyle c lineS fadeS fadeS fillS+ lineS c = mempty # lc c # lwO 3 -- normal+ fadeS c = mempty # fc (blend 0.1 white c) # lc c # lwO 1+ fillS c = mempty # fc c # lw none++-- | Theme using 'funColours' with no lines on 'areaStyle.+--+-- <<diagrams/src_Plots_Style_vividColourPic.svg#diagram=vividColourPic&width=600>>+vividColours :: (TypeableFloat n, Renderable (Path V2 n) b) => AxisStyle b V2 n+vividColours = AxisStyle viridis $+ zipWith mkStyle (cycle colours2) (cycle $ map (scale 1.2 . stroke) filledMarkers)+ where+ mkStyle c = PlotStyle c lineS markS fillS fillS+ lineS c = mempty # lc c # lwO 3 -- normal+ markS c = mempty # fc c # lwO 1 # lc white+ fillS c = mempty # fc c # lw none++-- | Theme without any colours, useful for black and white documents.+--+-- <<diagrams/src_Plots_Style_blackAndWhitePic.svg#diagram=blackAndWhitePic&width=600>>+blackAndWhite :: (TypeableFloat n, Renderable (Path V2 n) b) => AxisStyle b V2 n+blackAndWhite = AxisStyle greys $+ zipWith3 mkStyle (cycle colours) (cycle lineStyles) (cycle $ map stroke filledMarkers)+ where+ mkStyle c ls = PlotStyle c ls markerS (mk fc) (mk fc)+ mk f c = mempty # f c+ --+ markerS c = mempty # fc white # lc c+ lineStyles = mempty : map (\ds -> mempty # dashingL ds 0) dashes+ dashes = [[6,6], [6,2], [2,2], [6,8,3]]+ colours = [black, blend 0.8 black white, blend 0.6 black white, blend 0.4 black white]++------------------------------------------------------------------------+-- Colours+------------------------------------------------------------------------++-- Unimaginative names :(++-- | A colourful colour set used for 'fadedColours'.+colours1 :: OrderedField n => [Colour n]+colours1 = cycle+ [ sRGB24 228 26 28+ , sRGB24 55 126 184+ , sRGB24 77 175 74+ , sRGB24 152 78 163+ , sRGB24 255 127 0+ , sRGB24 166 86 40+ , sRGB24 247 129 191+ , sRGB24 153 153 153+ ]++-- | Another colour set, used for 'vividColours'.+colours2 :: OrderedField n => [Colour n]+colours2 = cycle+ [ sRGB24 27 158 119+ , sRGB24 217 95 2+ , sRGB24 117 112 179+ , sRGB24 231 41 138+ , sRGB24 102 166 30+ , sRGB24 230 171 2+ , sRGB24 166 118 29+ , sRGB24 102 102 102+ ]++-- | Markers which have a filling, used for 'fadedColours' and+-- 'vividColours'.+filledMarkers :: RealFloat n => [Path V2 n]+filledMarkers = scale 11 . map (centerXY . pathFromTrail) $ cycle+ [ circle 0.5+ , square 1+ , triangle 1+ , diamond (1 / sqrt 2)+ , pentagon 0.6+ , crossShape 1+ , plus 1+ , star' 0.8+ ]++-- | 'asterisk' markers with varying numbers of prongs.+lineMarkers :: OrderedField n => [Path V2 n]+lineMarkers = scale 11 $ cycle+ [ asterisk 4 1 # rotateBy (1/8)+ , asterisk 6 1+ , asterisk 5 1+ , asterisk 2 1+ , asterisk 2 1 # rotateBy (1/4)+ , asterisk 10 1+ , asterisk 3 1+ , asterisk 3 1 # rotateBy (1/2)+ ]++------------------------------------------------------------------------+-- Shapes+------------------------------------------------------------------------++-- | Make an asterisk with @n@ spokes, each of length @l@.+asterisk :: OrderedField n => Int -> n -> Path V2 n+asterisk n x+ = mconcat . take n+ . iterate (rotateBy (1/fromIntegral n))+ $ (0 ^& 0) ~~ (0 ^& x)++-- | A rotated 'square'.+diamond :: (InSpace V2 n t, TrailLike t) => n -> t+diamond = trailLike . rotateBy (1/8) . square++-- | A rotated 'plus'.+crossShape :: (InSpace V2 n t, TrailLike t) => n -> t+crossShape = trailLike . rotateBy (1/8) . plus++-- | Filled in @+@ symbol.+plus :: (InSpace V2 n t, TrailLike t) => n -> t+plus x = trailLike . (`at` mkP2 (x/6) (x/6))+ . wrapTrail . glueLine . mconcat . take 4+ . iterate (rotateBy (1/4)) . onLineSegments init+ $ square (x/3)++-- | A filled in five sided start of size x.+star' :: (InSpace V2 n t, TrailLike t) => n -> t+star' x = trailLike . (`at` mkP2 (-x/6) (x/6))+ . wrapTrail . glueLine . mconcat . take 5+ . iterate (rotateBy (-1/5)) $ spoke+ where+ spoke = fromOffsets . map r2 $ [(x/6,x/2), (x/6,-x/2)]++------------------------------------------------------------------------+-- Colour maps+------------------------------------------------------------------------++-- type ColourMap = [(Double, AlphaColour Double)]++-- | A map from a number (usually between 0 and 1) to a colour. Colour+-- maps are part of the 'AxisStyle', which is used for plots like+-- 'Plots.Types.HeatMap'.+newtype ColourMap = ColourMap (M.Map Rational (AlphaColour Double))+ deriving Show+++type instance V ColourMap = V1+type instance N ColourMap = Rational++-- makeWrapped ''ColourMap+-- manually write instance to avoid template haskell splitting the+-- module up+instance Rewrapped ColourMap ColourMap+instance Wrapped ColourMap where+ type Unwrapped ColourMap = M.Map Rational (AlphaColour Double)+ _Wrapped' = iso (\(ColourMap a) -> a) ColourMap+ {-# INLINE _Wrapped' #-}++p1apply :: Num a => Transformation V1 a -> a -> a+p1apply t a = papply t (P (V1 a)) ^. _x++instance Transformable ColourMap where+ transform t = over (_Wrapped' . _Wrapped' . mapped . _1) (p1apply t)++type instance Index ColourMap = Rational+type instance IxValue ColourMap = AlphaColour Double++instance AsEmpty ColourMap where+ _Empty = nearly (ColourMap M.empty) (allOf each (==transparent))++instance Each ColourMap ColourMap (AlphaColour Double) (AlphaColour Double) where+ each = _Wrapped' . each++instance Ixed ColourMap where+ ix = ixColour++-- | 'Nothing' == 'transparent'+instance At ColourMap where+ at x = ixColour x . from (non transparent)++ixColour :: Rational -> Lens' ColourMap (AlphaColour Double)+ixColour x f (ColourMap cm) = f c <&> \c' -> ColourMap (M.insert x c' cm)+ where+ c = case (M.lookupLE x cm, M.lookupGE x cm) of+ (Just (i,c1), Just (j,c2))+ | i == j -> c1+ | otherwise ->+ let a = fromRational $ (x - i) / (j - i)+ in blend a c2 c1+ (Just (_,c1), Nothing) -> c1+ (Nothing, Just (_,c2)) -> c2+ _ -> transparent++-- | Indexed traversal over the colours indexed and ordered by their+-- position in the map.+cmTraverse :: IndexedTraversal' Rational ColourMap (AlphaColour Double)+cmTraverse = _Wrapped' . itraversed++-- | Return the list of colours in the [0,1] range in order. This always+-- includes colours 0 and 1.+colourList :: ColourMap -> [(Rational, AlphaColour Double)]+colourList = itoListOf (cmTraverse . ifiltered (\i _ -> i >= 0 && i <= 1))+ . (ixColour 0 %~ id) . (ixColour 1 %~ id)+ -- touch colours at 0 and 1 so they're in the list++colourMap :: [(Rational, Colour Double)] -> ColourMap+colourMap = alphaColourMap . over (mapped . _2) opaque++alphaColourMap :: [(Rational, AlphaColour Double)] -> ColourMap+alphaColourMap [] = ColourMap M.empty+alphaColourMap cs+ | a == b = ColourMap (M.singleton 0.5 c)+ | otherwise = ColourMap (M.mapKeysMonotonic normalise cm)+ where+ cm = M.fromList cs+ (a,c) = M.findMin cm+ (b,_) = M.findMax cm+ normalise x = (x - a) / (b - a)++toStops :: Fractional n => ColourMap -> [GradientStop n]+toStops = map (\(x,c) -> GradientStop (SomeColor c) (fromRational x))+ . colourList++-- Colour maps ---------------------------------------------------------++-- > import Plots+-- > cmBar cm = gradientColourBar cm # scaleX 15+-- > greysBar = cmBar greys+-- > magmaBar = cmBar Plots.magma+-- > infernoBar = cmBar inferno+-- > plasmaBar = cmBar plasma+-- > viridisBar = cmBar viridis++-- | A colour map from black to white.+--+-- <<diagrams/src_Plots_Style_greysBar.svg#diagram=greysBar&width=600>>+greys :: ColourMap+greys = colourMap [(0, black), (1, white)]++-- | The magma colour map taken from https://bids.github.io/colormap/.+--+-- <<diagrams/src_Plots_Style_magmaBar.svg#diagram=magmaBar&width=600>>+magma :: ColourMap+magma = colourMap $ zip [1..]+ [ sRGB 0.001462 0.000466 0.013866, sRGB 0.002258 0.001295 0.018331+ , sRGB 0.003279 0.002305 0.023708, sRGB 0.004512 0.003490 0.029965+ , sRGB 0.005950 0.004843 0.037130, sRGB 0.007588 0.006356 0.044973+ , sRGB 0.009426 0.008022 0.052844, sRGB 0.011465 0.009828 0.060750+ , sRGB 0.013708 0.011771 0.068667, sRGB 0.016156 0.013840 0.076603+ , sRGB 0.018815 0.016026 0.084584, sRGB 0.021692 0.018320 0.092610+ , sRGB 0.024792 0.020715 0.100676, sRGB 0.028123 0.023201 0.108787+ , sRGB 0.031696 0.025765 0.116965, sRGB 0.035520 0.028397 0.125209+ , sRGB 0.039608 0.031090 0.133515, sRGB 0.043830 0.033830 0.141886+ , sRGB 0.048062 0.036607 0.150327, sRGB 0.052320 0.039407 0.158841+ , sRGB 0.056615 0.042160 0.167446, sRGB 0.060949 0.044794 0.176129+ , sRGB 0.065330 0.047318 0.184892, sRGB 0.069764 0.049726 0.193735+ , sRGB 0.074257 0.052017 0.202660, sRGB 0.078815 0.054184 0.211667+ , sRGB 0.083446 0.056225 0.220755, sRGB 0.088155 0.058133 0.229922+ , sRGB 0.092949 0.059904 0.239164, sRGB 0.097833 0.061531 0.248477+ , sRGB 0.102815 0.063010 0.257854, sRGB 0.107899 0.064335 0.267289+ , sRGB 0.113094 0.065492 0.276784, sRGB 0.118405 0.066479 0.286321+ , sRGB 0.123833 0.067295 0.295879, sRGB 0.129380 0.067935 0.305443+ , sRGB 0.135053 0.068391 0.315000, sRGB 0.140858 0.068654 0.324538+ , sRGB 0.146785 0.068738 0.334011, sRGB 0.152839 0.068637 0.343404+ , sRGB 0.159018 0.068354 0.352688, sRGB 0.165308 0.067911 0.361816+ , sRGB 0.171713 0.067305 0.370771, sRGB 0.178212 0.066576 0.379497+ , sRGB 0.184801 0.065732 0.387973, sRGB 0.191460 0.064818 0.396152+ , sRGB 0.198177 0.063862 0.404009, sRGB 0.204935 0.062907 0.411514+ , sRGB 0.211718 0.061992 0.418647, sRGB 0.218512 0.061158 0.425392+ , sRGB 0.225302 0.060445 0.431742, sRGB 0.232077 0.059889 0.437695+ , sRGB 0.238826 0.059517 0.443256, sRGB 0.245543 0.059352 0.448436+ , sRGB 0.252220 0.059415 0.453248, sRGB 0.258857 0.059706 0.457710+ , sRGB 0.265447 0.060237 0.461840, sRGB 0.271994 0.060994 0.465660+ , sRGB 0.278493 0.061978 0.469190, sRGB 0.284951 0.063168 0.472451+ , sRGB 0.291366 0.064553 0.475462, sRGB 0.297740 0.066117 0.478243+ , sRGB 0.304081 0.067835 0.480812, sRGB 0.310382 0.069702 0.483186+ , sRGB 0.316654 0.071690 0.485380, sRGB 0.322899 0.073782 0.487408+ , sRGB 0.329114 0.075972 0.489287, sRGB 0.335308 0.078236 0.491024+ , sRGB 0.341482 0.080564 0.492631, sRGB 0.347636 0.082946 0.494121+ , sRGB 0.353773 0.085373 0.495501, sRGB 0.359898 0.087831 0.496778+ , sRGB 0.366012 0.090314 0.497960, sRGB 0.372116 0.092816 0.499053+ , sRGB 0.378211 0.095332 0.500067, sRGB 0.384299 0.097855 0.501002+ , sRGB 0.390384 0.100379 0.501864, sRGB 0.396467 0.102902 0.502658+ , sRGB 0.402548 0.105420 0.503386, sRGB 0.408629 0.107930 0.504052+ , sRGB 0.414709 0.110431 0.504662, sRGB 0.420791 0.112920 0.505215+ , sRGB 0.426877 0.115395 0.505714, sRGB 0.432967 0.117855 0.506160+ , sRGB 0.439062 0.120298 0.506555, sRGB 0.445163 0.122724 0.506901+ , sRGB 0.451271 0.125132 0.507198, sRGB 0.457386 0.127522 0.507448+ , sRGB 0.463508 0.129893 0.507652, sRGB 0.469640 0.132245 0.507809+ , sRGB 0.475780 0.134577 0.507921, sRGB 0.481929 0.136891 0.507989+ , sRGB 0.488088 0.139186 0.508011, sRGB 0.494258 0.141462 0.507988+ , sRGB 0.500438 0.143719 0.507920, sRGB 0.506629 0.145958 0.507806+ , sRGB 0.512831 0.148179 0.507648, sRGB 0.519045 0.150383 0.507443+ , sRGB 0.525270 0.152569 0.507192, sRGB 0.531507 0.154739 0.506895+ , sRGB 0.537755 0.156894 0.506551, sRGB 0.544015 0.159033 0.506159+ , sRGB 0.550287 0.161158 0.505719, sRGB 0.556571 0.163269 0.505230+ , sRGB 0.562866 0.165368 0.504692, sRGB 0.569172 0.167454 0.504105+ , sRGB 0.575490 0.169530 0.503466, sRGB 0.581819 0.171596 0.502777+ , sRGB 0.588158 0.173652 0.502035, sRGB 0.594508 0.175701 0.501241+ , sRGB 0.600868 0.177743 0.500394, sRGB 0.607238 0.179779 0.499492+ , sRGB 0.613617 0.181811 0.498536, sRGB 0.620005 0.183840 0.497524+ , sRGB 0.626401 0.185867 0.496456, sRGB 0.632805 0.187893 0.495332+ , sRGB 0.639216 0.189921 0.494150, sRGB 0.645633 0.191952 0.492910+ , sRGB 0.652056 0.193986 0.491611, sRGB 0.658483 0.196027 0.490253+ , sRGB 0.664915 0.198075 0.488836, sRGB 0.671349 0.200133 0.487358+ , sRGB 0.677786 0.202203 0.485819, sRGB 0.684224 0.204286 0.484219+ , sRGB 0.690661 0.206384 0.482558, sRGB 0.697098 0.208501 0.480835+ , sRGB 0.703532 0.210638 0.479049, sRGB 0.709962 0.212797 0.477201+ , sRGB 0.716387 0.214982 0.475290, sRGB 0.722805 0.217194 0.473316+ , sRGB 0.729216 0.219437 0.471279, sRGB 0.735616 0.221713 0.469180+ , sRGB 0.742004 0.224025 0.467018, sRGB 0.748378 0.226377 0.464794+ , sRGB 0.754737 0.228772 0.462509, sRGB 0.761077 0.231214 0.460162+ , sRGB 0.767398 0.233705 0.457755, sRGB 0.773695 0.236249 0.455289+ , sRGB 0.779968 0.238851 0.452765, sRGB 0.786212 0.241514 0.450184+ , sRGB 0.792427 0.244242 0.447543, sRGB 0.798608 0.247040 0.444848+ , sRGB 0.804752 0.249911 0.442102, sRGB 0.810855 0.252861 0.439305+ , sRGB 0.816914 0.255895 0.436461, sRGB 0.822926 0.259016 0.433573+ , sRGB 0.828886 0.262229 0.430644, sRGB 0.834791 0.265540 0.427671+ , sRGB 0.840636 0.268953 0.424666, sRGB 0.846416 0.272473 0.421631+ , sRGB 0.852126 0.276106 0.418573, sRGB 0.857763 0.279857 0.415496+ , sRGB 0.863320 0.283729 0.412403, sRGB 0.868793 0.287728 0.409303+ , sRGB 0.874176 0.291859 0.406205, sRGB 0.879464 0.296125 0.403118+ , sRGB 0.884651 0.300530 0.400047, sRGB 0.889731 0.305079 0.397002+ , sRGB 0.894700 0.309773 0.393995, sRGB 0.899552 0.314616 0.391037+ , sRGB 0.904281 0.319610 0.388137, sRGB 0.908884 0.324755 0.385308+ , sRGB 0.913354 0.330052 0.382563, sRGB 0.917689 0.335500 0.379915+ , sRGB 0.921884 0.341098 0.377376, sRGB 0.925937 0.346844 0.374959+ , sRGB 0.929845 0.352734 0.372677, sRGB 0.933606 0.358764 0.370541+ , sRGB 0.937221 0.364929 0.368567, sRGB 0.940687 0.371224 0.366762+ , sRGB 0.944006 0.377643 0.365136, sRGB 0.947180 0.384178 0.363701+ , sRGB 0.950210 0.390820 0.362468, sRGB 0.953099 0.397563 0.361438+ , sRGB 0.955849 0.404400 0.360619, sRGB 0.958464 0.411324 0.360014+ , sRGB 0.960949 0.418323 0.359630, sRGB 0.963310 0.425390 0.359469+ , sRGB 0.965549 0.432519 0.359529, sRGB 0.967671 0.439703 0.359810+ , sRGB 0.969680 0.446936 0.360311, sRGB 0.971582 0.454210 0.361030+ , sRGB 0.973381 0.461520 0.361965, sRGB 0.975082 0.468861 0.363111+ , sRGB 0.976690 0.476226 0.364466, sRGB 0.978210 0.483612 0.366025+ , sRGB 0.979645 0.491014 0.367783, sRGB 0.981000 0.498428 0.369734+ , sRGB 0.982279 0.505851 0.371874, sRGB 0.983485 0.513280 0.374198+ , sRGB 0.984622 0.520713 0.376698, sRGB 0.985693 0.528148 0.379371+ , sRGB 0.986700 0.535582 0.382210, sRGB 0.987646 0.543015 0.385210+ , sRGB 0.988533 0.550446 0.388365, sRGB 0.989363 0.557873 0.391671+ , sRGB 0.990138 0.565296 0.395122, sRGB 0.990871 0.572706 0.398714+ , sRGB 0.991558 0.580107 0.402441, sRGB 0.992196 0.587502 0.406299+ , sRGB 0.992785 0.594891 0.410283, sRGB 0.993326 0.602275 0.414390+ , sRGB 0.993834 0.609644 0.418613, sRGB 0.994309 0.616999 0.422950+ , sRGB 0.994738 0.624350 0.427397, sRGB 0.995122 0.631696 0.431951+ , sRGB 0.995480 0.639027 0.436607, sRGB 0.995810 0.646344 0.441361+ , sRGB 0.996096 0.653659 0.446213, sRGB 0.996341 0.660969 0.451160+ , sRGB 0.996580 0.668256 0.456192, sRGB 0.996775 0.675541 0.461314+ , sRGB 0.996925 0.682828 0.466526, sRGB 0.997077 0.690088 0.471811+ , sRGB 0.997186 0.697349 0.477182, sRGB 0.997254 0.704611 0.482635+ , sRGB 0.997325 0.711848 0.488154, sRGB 0.997351 0.719089 0.493755+ , sRGB 0.997351 0.726324 0.499428, sRGB 0.997341 0.733545 0.505167+ , sRGB 0.997285 0.740772 0.510983, sRGB 0.997228 0.747981 0.516859+ , sRGB 0.997138 0.755190 0.522806, sRGB 0.997019 0.762398 0.528821+ , sRGB 0.996898 0.769591 0.534892, sRGB 0.996727 0.776795 0.541039+ , sRGB 0.996571 0.783977 0.547233, sRGB 0.996369 0.791167 0.553499+ , sRGB 0.996162 0.798348 0.559820, sRGB 0.995932 0.805527 0.566202+ , sRGB 0.995680 0.812706 0.572645, sRGB 0.995424 0.819875 0.579140+ , sRGB 0.995131 0.827052 0.585701, sRGB 0.994851 0.834213 0.592307+ , sRGB 0.994524 0.841387 0.598983, sRGB 0.994222 0.848540 0.605696+ , sRGB 0.993866 0.855711 0.612482, sRGB 0.993545 0.862859 0.619299+ , sRGB 0.993170 0.870024 0.626189, sRGB 0.992831 0.877168 0.633109+ , sRGB 0.992440 0.884330 0.640099, sRGB 0.992089 0.891470 0.647116+ , sRGB 0.991688 0.898627 0.654202, sRGB 0.991332 0.905763 0.661309+ , sRGB 0.990930 0.912915 0.668481, sRGB 0.990570 0.920049 0.675675+ , sRGB 0.990175 0.927196 0.682926, sRGB 0.989815 0.934329 0.690198+ , sRGB 0.989434 0.941470 0.697519, sRGB 0.989077 0.948604 0.704863+ , sRGB 0.988717 0.955742 0.712242, sRGB 0.988367 0.962878 0.719649+ , sRGB 0.988033 0.970012 0.727077, sRGB 0.987691 0.977154 0.734536+ , sRGB 0.987387 0.984288 0.742002, sRGB 0.987053 0.991438 0.749504+ ]++-- | The inferno colour map taken from https://bids.github.io/colormap/.+--+-- <<diagrams/src_Plots_Style_infernoBar.svg#diagram=infernoBar&width=600>>+inferno :: ColourMap+inferno = colourMap $ zip [1..]+ [ sRGB 0.001462 0.000466 0.013866, sRGB 0.002267 0.001270 0.018570+ , sRGB 0.003299 0.002249 0.024239, sRGB 0.004547 0.003392 0.030909+ , sRGB 0.006006 0.004692 0.038558, sRGB 0.007676 0.006136 0.046836+ , sRGB 0.009561 0.007713 0.055143, sRGB 0.011663 0.009417 0.063460+ , sRGB 0.013995 0.011225 0.071862, sRGB 0.016561 0.013136 0.080282+ , sRGB 0.019373 0.015133 0.088767, sRGB 0.022447 0.017199 0.097327+ , sRGB 0.025793 0.019331 0.105930, sRGB 0.029432 0.021503 0.114621+ , sRGB 0.033385 0.023702 0.123397, sRGB 0.037668 0.025921 0.132232+ , sRGB 0.042253 0.028139 0.141141, sRGB 0.046915 0.030324 0.150164+ , sRGB 0.051644 0.032474 0.159254, sRGB 0.056449 0.034569 0.168414+ , sRGB 0.061340 0.036590 0.177642, sRGB 0.066331 0.038504 0.186962+ , sRGB 0.071429 0.040294 0.196354, sRGB 0.076637 0.041905 0.205799+ , sRGB 0.081962 0.043328 0.215289, sRGB 0.087411 0.044556 0.224813+ , sRGB 0.092990 0.045583 0.234358, sRGB 0.098702 0.046402 0.243904+ , sRGB 0.104551 0.047008 0.253430, sRGB 0.110536 0.047399 0.262912+ , sRGB 0.116656 0.047574 0.272321, sRGB 0.122908 0.047536 0.281624+ , sRGB 0.129285 0.047293 0.290788, sRGB 0.135778 0.046856 0.299776+ , sRGB 0.142378 0.046242 0.308553, sRGB 0.149073 0.045468 0.317085+ , sRGB 0.155850 0.044559 0.325338, sRGB 0.162689 0.043554 0.333277+ , sRGB 0.169575 0.042489 0.340874, sRGB 0.176493 0.041402 0.348111+ , sRGB 0.183429 0.040329 0.354971, sRGB 0.190367 0.039309 0.361447+ , sRGB 0.197297 0.038400 0.367535, sRGB 0.204209 0.037632 0.373238+ , sRGB 0.211095 0.037030 0.378563, sRGB 0.217949 0.036615 0.383522+ , sRGB 0.224763 0.036405 0.388129, sRGB 0.231538 0.036405 0.392400+ , sRGB 0.238273 0.036621 0.396353, sRGB 0.244967 0.037055 0.400007+ , sRGB 0.251620 0.037705 0.403378, sRGB 0.258234 0.038571 0.406485+ , sRGB 0.264810 0.039647 0.409345, sRGB 0.271347 0.040922 0.411976+ , sRGB 0.277850 0.042353 0.414392, sRGB 0.284321 0.043933 0.416608+ , sRGB 0.290763 0.045644 0.418637, sRGB 0.297178 0.047470 0.420491+ , sRGB 0.303568 0.049396 0.422182, sRGB 0.309935 0.051407 0.423721+ , sRGB 0.316282 0.053490 0.425116, sRGB 0.322610 0.055634 0.426377+ , sRGB 0.328921 0.057827 0.427511, sRGB 0.335217 0.060060 0.428524+ , sRGB 0.341500 0.062325 0.429425, sRGB 0.347771 0.064616 0.430217+ , sRGB 0.354032 0.066925 0.430906, sRGB 0.360284 0.069247 0.431497+ , sRGB 0.366529 0.071579 0.431994, sRGB 0.372768 0.073915 0.432400+ , sRGB 0.379001 0.076253 0.432719, sRGB 0.385228 0.078591 0.432955+ , sRGB 0.391453 0.080927 0.433109, sRGB 0.397674 0.083257 0.433183+ , sRGB 0.403894 0.085580 0.433179, sRGB 0.410113 0.087896 0.433098+ , sRGB 0.416331 0.090203 0.432943, sRGB 0.422549 0.092501 0.432714+ , sRGB 0.428768 0.094790 0.432412, sRGB 0.434987 0.097069 0.432039+ , sRGB 0.441207 0.099338 0.431594, sRGB 0.447428 0.101597 0.431080+ , sRGB 0.453651 0.103848 0.430498, sRGB 0.459875 0.106089 0.429846+ , sRGB 0.466100 0.108322 0.429125, sRGB 0.472328 0.110547 0.428334+ , sRGB 0.478558 0.112764 0.427475, sRGB 0.484789 0.114974 0.426548+ , sRGB 0.491022 0.117179 0.425552, sRGB 0.497257 0.119379 0.424488+ , sRGB 0.503493 0.121575 0.423356, sRGB 0.509730 0.123769 0.422156+ , sRGB 0.515967 0.125960 0.420887, sRGB 0.522206 0.128150 0.419549+ , sRGB 0.528444 0.130341 0.418142, sRGB 0.534683 0.132534 0.416667+ , sRGB 0.540920 0.134729 0.415123, sRGB 0.547157 0.136929 0.413511+ , sRGB 0.553392 0.139134 0.411829, sRGB 0.559624 0.141346 0.410078+ , sRGB 0.565854 0.143567 0.408258, sRGB 0.572081 0.145797 0.406369+ , sRGB 0.578304 0.148039 0.404411, sRGB 0.584521 0.150294 0.402385+ , sRGB 0.590734 0.152563 0.400290, sRGB 0.596940 0.154848 0.398125+ , sRGB 0.603139 0.157151 0.395891, sRGB 0.609330 0.159474 0.393589+ , sRGB 0.615513 0.161817 0.391219, sRGB 0.621685 0.164184 0.388781+ , sRGB 0.627847 0.166575 0.386276, sRGB 0.633998 0.168992 0.383704+ , sRGB 0.640135 0.171438 0.381065, sRGB 0.646260 0.173914 0.378359+ , sRGB 0.652369 0.176421 0.375586, sRGB 0.658463 0.178962 0.372748+ , sRGB 0.664540 0.181539 0.369846, sRGB 0.670599 0.184153 0.366879+ , sRGB 0.676638 0.186807 0.363849, sRGB 0.682656 0.189501 0.360757+ , sRGB 0.688653 0.192239 0.357603, sRGB 0.694627 0.195021 0.354388+ , sRGB 0.700576 0.197851 0.351113, sRGB 0.706500 0.200728 0.347777+ , sRGB 0.712396 0.203656 0.344383, sRGB 0.718264 0.206636 0.340931+ , sRGB 0.724103 0.209670 0.337424, sRGB 0.729909 0.212759 0.333861+ , sRGB 0.735683 0.215906 0.330245, sRGB 0.741423 0.219112 0.326576+ , sRGB 0.747127 0.222378 0.322856, sRGB 0.752794 0.225706 0.319085+ , sRGB 0.758422 0.229097 0.315266, sRGB 0.764010 0.232554 0.311399+ , sRGB 0.769556 0.236077 0.307485, sRGB 0.775059 0.239667 0.303526+ , sRGB 0.780517 0.243327 0.299523, sRGB 0.785929 0.247056 0.295477+ , sRGB 0.791293 0.250856 0.291390, sRGB 0.796607 0.254728 0.287264+ , sRGB 0.801871 0.258674 0.283099, sRGB 0.807082 0.262692 0.278898+ , sRGB 0.812239 0.266786 0.274661, sRGB 0.817341 0.270954 0.270390+ , sRGB 0.822386 0.275197 0.266085, sRGB 0.827372 0.279517 0.261750+ , sRGB 0.832299 0.283913 0.257383, sRGB 0.837165 0.288385 0.252988+ , sRGB 0.841969 0.292933 0.248564, sRGB 0.846709 0.297559 0.244113+ , sRGB 0.851384 0.302260 0.239636, sRGB 0.855992 0.307038 0.235133+ , sRGB 0.860533 0.311892 0.230606, sRGB 0.865006 0.316822 0.226055+ , sRGB 0.869409 0.321827 0.221482, sRGB 0.873741 0.326906 0.216886+ , sRGB 0.878001 0.332060 0.212268, sRGB 0.882188 0.337287 0.207628+ , sRGB 0.886302 0.342586 0.202968, sRGB 0.890341 0.347957 0.198286+ , sRGB 0.894305 0.353399 0.193584, sRGB 0.898192 0.358911 0.188860+ , sRGB 0.902003 0.364492 0.184116, sRGB 0.905735 0.370140 0.179350+ , sRGB 0.909390 0.375856 0.174563, sRGB 0.912966 0.381636 0.169755+ , sRGB 0.916462 0.387481 0.164924, sRGB 0.919879 0.393389 0.160070+ , sRGB 0.923215 0.399359 0.155193, sRGB 0.926470 0.405389 0.150292+ , sRGB 0.929644 0.411479 0.145367, sRGB 0.932737 0.417627 0.140417+ , sRGB 0.935747 0.423831 0.135440, sRGB 0.938675 0.430091 0.130438+ , sRGB 0.941521 0.436405 0.125409, sRGB 0.944285 0.442772 0.120354+ , sRGB 0.946965 0.449191 0.115272, sRGB 0.949562 0.455660 0.110164+ , sRGB 0.952075 0.462178 0.105031, sRGB 0.954506 0.468744 0.099874+ , sRGB 0.956852 0.475356 0.094695, sRGB 0.959114 0.482014 0.089499+ , sRGB 0.961293 0.488716 0.084289, sRGB 0.963387 0.495462 0.079073+ , sRGB 0.965397 0.502249 0.073859, sRGB 0.967322 0.509078 0.068659+ , sRGB 0.969163 0.515946 0.063488, sRGB 0.970919 0.522853 0.058367+ , sRGB 0.972590 0.529798 0.053324, sRGB 0.974176 0.536780 0.048392+ , sRGB 0.975677 0.543798 0.043618, sRGB 0.977092 0.550850 0.039050+ , sRGB 0.978422 0.557937 0.034931, sRGB 0.979666 0.565057 0.031409+ , sRGB 0.980824 0.572209 0.028508, sRGB 0.981895 0.579392 0.026250+ , sRGB 0.982881 0.586606 0.024661, sRGB 0.983779 0.593849 0.023770+ , sRGB 0.984591 0.601122 0.023606, sRGB 0.985315 0.608422 0.024202+ , sRGB 0.985952 0.615750 0.025592, sRGB 0.986502 0.623105 0.027814+ , sRGB 0.986964 0.630485 0.030908, sRGB 0.987337 0.637890 0.034916+ , sRGB 0.987622 0.645320 0.039886, sRGB 0.987819 0.652773 0.045581+ , sRGB 0.987926 0.660250 0.051750, sRGB 0.987945 0.667748 0.058329+ , sRGB 0.987874 0.675267 0.065257, sRGB 0.987714 0.682807 0.072489+ , sRGB 0.987464 0.690366 0.079990, sRGB 0.987124 0.697944 0.087731+ , sRGB 0.986694 0.705540 0.095694, sRGB 0.986175 0.713153 0.103863+ , sRGB 0.985566 0.720782 0.112229, sRGB 0.984865 0.728427 0.120785+ , sRGB 0.984075 0.736087 0.129527, sRGB 0.983196 0.743758 0.138453+ , sRGB 0.982228 0.751442 0.147565, sRGB 0.981173 0.759135 0.156863+ , sRGB 0.980032 0.766837 0.166353, sRGB 0.978806 0.774545 0.176037+ , sRGB 0.977497 0.782258 0.185923, sRGB 0.976108 0.789974 0.196018+ , sRGB 0.974638 0.797692 0.206332, sRGB 0.973088 0.805409 0.216877+ , sRGB 0.971468 0.813122 0.227658, sRGB 0.969783 0.820825 0.238686+ , sRGB 0.968041 0.828515 0.249972, sRGB 0.966243 0.836191 0.261534+ , sRGB 0.964394 0.843848 0.273391, sRGB 0.962517 0.851476 0.285546+ , sRGB 0.960626 0.859069 0.298010, sRGB 0.958720 0.866624 0.310820+ , sRGB 0.956834 0.874129 0.323974, sRGB 0.954997 0.881569 0.337475+ , sRGB 0.953215 0.888942 0.351369, sRGB 0.951546 0.896226 0.365627+ , sRGB 0.950018 0.903409 0.380271, sRGB 0.948683 0.910473 0.395289+ , sRGB 0.947594 0.917399 0.410665, sRGB 0.946809 0.924168 0.426373+ , sRGB 0.946392 0.930761 0.442367, sRGB 0.946403 0.937159 0.458592+ , sRGB 0.946903 0.943348 0.474970, sRGB 0.947937 0.949318 0.491426+ , sRGB 0.949545 0.955063 0.507860, sRGB 0.951740 0.960587 0.524203+ , sRGB 0.954529 0.965896 0.540361, sRGB 0.957896 0.971003 0.556275+ , sRGB 0.961812 0.975924 0.571925, sRGB 0.966249 0.980678 0.587206+ , sRGB 0.971162 0.985282 0.602154, sRGB 0.976511 0.989753 0.616760+ , sRGB 0.982257 0.994109 0.631017, sRGB 0.988362 0.998364 0.644924+ ]++-- | The plasma colour map taken from https://bids.github.io/colormap/.+--+-- <<diagrams/src_Plots_Style_plasmaBar.svg#diagram=plasmaBar&width=600>>+plasma :: ColourMap+plasma = colourMap $ zip [1..]+ [ sRGB 0.050383 0.029803 0.527975, sRGB 0.063536 0.028426 0.533124+ , sRGB 0.075353 0.027206 0.538007, sRGB 0.086222 0.026125 0.542658+ , sRGB 0.096379 0.025165 0.547103, sRGB 0.105980 0.024309 0.551368+ , sRGB 0.115124 0.023556 0.555468, sRGB 0.123903 0.022878 0.559423+ , sRGB 0.132381 0.022258 0.563250, sRGB 0.140603 0.021687 0.566959+ , sRGB 0.148607 0.021154 0.570562, sRGB 0.156421 0.020651 0.574065+ , sRGB 0.164070 0.020171 0.577478, sRGB 0.171574 0.019706 0.580806+ , sRGB 0.178950 0.019252 0.584054, sRGB 0.186213 0.018803 0.587228+ , sRGB 0.193374 0.018354 0.590330, sRGB 0.200445 0.017902 0.593364+ , sRGB 0.207435 0.017442 0.596333, sRGB 0.214350 0.016973 0.599239+ , sRGB 0.221197 0.016497 0.602083, sRGB 0.227983 0.016007 0.604867+ , sRGB 0.234715 0.015502 0.607592, sRGB 0.241396 0.014979 0.610259+ , sRGB 0.248032 0.014439 0.612868, sRGB 0.254627 0.013882 0.615419+ , sRGB 0.261183 0.013308 0.617911, sRGB 0.267703 0.012716 0.620346+ , sRGB 0.274191 0.012109 0.622722, sRGB 0.280648 0.011488 0.625038+ , sRGB 0.287076 0.010855 0.627295, sRGB 0.293478 0.010213 0.629490+ , sRGB 0.299855 0.009561 0.631624, sRGB 0.306210 0.008902 0.633694+ , sRGB 0.312543 0.008239 0.635700, sRGB 0.318856 0.007576 0.637640+ , sRGB 0.325150 0.006915 0.639512, sRGB 0.331426 0.006261 0.641316+ , sRGB 0.337683 0.005618 0.643049, sRGB 0.343925 0.004991 0.644710+ , sRGB 0.350150 0.004382 0.646298, sRGB 0.356359 0.003798 0.647810+ , sRGB 0.362553 0.003243 0.649245, sRGB 0.368733 0.002724 0.650601+ , sRGB 0.374897 0.002245 0.651876, sRGB 0.381047 0.001814 0.653068+ , sRGB 0.387183 0.001434 0.654177, sRGB 0.393304 0.001114 0.655199+ , sRGB 0.399411 0.000859 0.656133, sRGB 0.405503 0.000678 0.656977+ , sRGB 0.411580 0.000577 0.657730, sRGB 0.417642 0.000564 0.658390+ , sRGB 0.423689 0.000646 0.658956, sRGB 0.429719 0.000831 0.659425+ , sRGB 0.435734 0.001127 0.659797, sRGB 0.441732 0.001540 0.660069+ , sRGB 0.447714 0.002080 0.660240, sRGB 0.453677 0.002755 0.660310+ , sRGB 0.459623 0.003574 0.660277, sRGB 0.465550 0.004545 0.660139+ , sRGB 0.471457 0.005678 0.659897, sRGB 0.477344 0.006980 0.659549+ , sRGB 0.483210 0.008460 0.659095, sRGB 0.489055 0.010127 0.658534+ , sRGB 0.494877 0.011990 0.657865, sRGB 0.500678 0.014055 0.657088+ , sRGB 0.506454 0.016333 0.656202, sRGB 0.512206 0.018833 0.655209+ , sRGB 0.517933 0.021563 0.654109, sRGB 0.523633 0.024532 0.652901+ , sRGB 0.529306 0.027747 0.651586, sRGB 0.534952 0.031217 0.650165+ , sRGB 0.540570 0.034950 0.648640, sRGB 0.546157 0.038954 0.647010+ , sRGB 0.551715 0.043136 0.645277, sRGB 0.557243 0.047331 0.643443+ , sRGB 0.562738 0.051545 0.641509, sRGB 0.568201 0.055778 0.639477+ , sRGB 0.573632 0.060028 0.637349, sRGB 0.579029 0.064296 0.635126+ , sRGB 0.584391 0.068579 0.632812, sRGB 0.589719 0.072878 0.630408+ , sRGB 0.595011 0.077190 0.627917, sRGB 0.600266 0.081516 0.625342+ , sRGB 0.605485 0.085854 0.622686, sRGB 0.610667 0.090204 0.619951+ , sRGB 0.615812 0.094564 0.617140, sRGB 0.620919 0.098934 0.614257+ , sRGB 0.625987 0.103312 0.611305, sRGB 0.631017 0.107699 0.608287+ , sRGB 0.636008 0.112092 0.605205, sRGB 0.640959 0.116492 0.602065+ , sRGB 0.645872 0.120898 0.598867, sRGB 0.650746 0.125309 0.595617+ , sRGB 0.655580 0.129725 0.592317, sRGB 0.660374 0.134144 0.588971+ , sRGB 0.665129 0.138566 0.585582, sRGB 0.669845 0.142992 0.582154+ , sRGB 0.674522 0.147419 0.578688, sRGB 0.679160 0.151848 0.575189+ , sRGB 0.683758 0.156278 0.571660, sRGB 0.688318 0.160709 0.568103+ , sRGB 0.692840 0.165141 0.564522, sRGB 0.697324 0.169573 0.560919+ , sRGB 0.701769 0.174005 0.557296, sRGB 0.706178 0.178437 0.553657+ , sRGB 0.710549 0.182868 0.550004, sRGB 0.714883 0.187299 0.546338+ , sRGB 0.719181 0.191729 0.542663, sRGB 0.723444 0.196158 0.538981+ , sRGB 0.727670 0.200586 0.535293, sRGB 0.731862 0.205013 0.531601+ , sRGB 0.736019 0.209439 0.527908, sRGB 0.740143 0.213864 0.524216+ , sRGB 0.744232 0.218288 0.520524, sRGB 0.748289 0.222711 0.516834+ , sRGB 0.752312 0.227133 0.513149, sRGB 0.756304 0.231555 0.509468+ , sRGB 0.760264 0.235976 0.505794, sRGB 0.764193 0.240396 0.502126+ , sRGB 0.768090 0.244817 0.498465, sRGB 0.771958 0.249237 0.494813+ , sRGB 0.775796 0.253658 0.491171, sRGB 0.779604 0.258078 0.487539+ , sRGB 0.783383 0.262500 0.483918, sRGB 0.787133 0.266922 0.480307+ , sRGB 0.790855 0.271345 0.476706, sRGB 0.794549 0.275770 0.473117+ , sRGB 0.798216 0.280197 0.469538, sRGB 0.801855 0.284626 0.465971+ , sRGB 0.805467 0.289057 0.462415, sRGB 0.809052 0.293491 0.458870+ , sRGB 0.812612 0.297928 0.455338, sRGB 0.816144 0.302368 0.451816+ , sRGB 0.819651 0.306812 0.448306, sRGB 0.823132 0.311261 0.444806+ , sRGB 0.826588 0.315714 0.441316, sRGB 0.830018 0.320172 0.437836+ , sRGB 0.833422 0.324635 0.434366, sRGB 0.836801 0.329105 0.430905+ , sRGB 0.840155 0.333580 0.427455, sRGB 0.843484 0.338062 0.424013+ , sRGB 0.846788 0.342551 0.420579, sRGB 0.850066 0.347048 0.417153+ , sRGB 0.853319 0.351553 0.413734, sRGB 0.856547 0.356066 0.410322+ , sRGB 0.859750 0.360588 0.406917, sRGB 0.862927 0.365119 0.403519+ , sRGB 0.866078 0.369660 0.400126, sRGB 0.869203 0.374212 0.396738+ , sRGB 0.872303 0.378774 0.393355, sRGB 0.875376 0.383347 0.389976+ , sRGB 0.878423 0.387932 0.386600, sRGB 0.881443 0.392529 0.383229+ , sRGB 0.884436 0.397139 0.379860, sRGB 0.887402 0.401762 0.376494+ , sRGB 0.890340 0.406398 0.373130, sRGB 0.893250 0.411048 0.369768+ , sRGB 0.896131 0.415712 0.366407, sRGB 0.898984 0.420392 0.363047+ , sRGB 0.901807 0.425087 0.359688, sRGB 0.904601 0.429797 0.356329+ , sRGB 0.907365 0.434524 0.352970, sRGB 0.910098 0.439268 0.349610+ , sRGB 0.912800 0.444029 0.346251, sRGB 0.915471 0.448807 0.342890+ , sRGB 0.918109 0.453603 0.339529, sRGB 0.920714 0.458417 0.336166+ , sRGB 0.923287 0.463251 0.332801, sRGB 0.925825 0.468103 0.329435+ , sRGB 0.928329 0.472975 0.326067, sRGB 0.930798 0.477867 0.322697+ , sRGB 0.933232 0.482780 0.319325, sRGB 0.935630 0.487712 0.315952+ , sRGB 0.937990 0.492667 0.312575, sRGB 0.940313 0.497642 0.309197+ , sRGB 0.942598 0.502639 0.305816, sRGB 0.944844 0.507658 0.302433+ , sRGB 0.947051 0.512699 0.299049, sRGB 0.949217 0.517763 0.295662+ , sRGB 0.951344 0.522850 0.292275, sRGB 0.953428 0.527960 0.288883+ , sRGB 0.955470 0.533093 0.285490, sRGB 0.957469 0.538250 0.282096+ , sRGB 0.959424 0.543431 0.278701, sRGB 0.961336 0.548636 0.275305+ , sRGB 0.963203 0.553865 0.271909, sRGB 0.965024 0.559118 0.268513+ , sRGB 0.966798 0.564396 0.265118, sRGB 0.968526 0.569700 0.261721+ , sRGB 0.970205 0.575028 0.258325, sRGB 0.971835 0.580382 0.254931+ , sRGB 0.973416 0.585761 0.251540, sRGB 0.974947 0.591165 0.248151+ , sRGB 0.976428 0.596595 0.244767, sRGB 0.977856 0.602051 0.241387+ , sRGB 0.979233 0.607532 0.238013, sRGB 0.980556 0.613039 0.234646+ , sRGB 0.981826 0.618572 0.231287, sRGB 0.983041 0.624131 0.227937+ , sRGB 0.984199 0.629718 0.224595, sRGB 0.985301 0.635330 0.221265+ , sRGB 0.986345 0.640969 0.217948, sRGB 0.987332 0.646633 0.214648+ , sRGB 0.988260 0.652325 0.211364, sRGB 0.989128 0.658043 0.208100+ , sRGB 0.989935 0.663787 0.204859, sRGB 0.990681 0.669558 0.201642+ , sRGB 0.991365 0.675355 0.198453, sRGB 0.991985 0.681179 0.195295+ , sRGB 0.992541 0.687030 0.192170, sRGB 0.993032 0.692907 0.189084+ , sRGB 0.993456 0.698810 0.186041, sRGB 0.993814 0.704741 0.183043+ , sRGB 0.994103 0.710698 0.180097, sRGB 0.994324 0.716681 0.177208+ , sRGB 0.994474 0.722691 0.174381, sRGB 0.994553 0.728728 0.171622+ , sRGB 0.994561 0.734791 0.168938, sRGB 0.994495 0.740880 0.166335+ , sRGB 0.994355 0.746995 0.163821, sRGB 0.994141 0.753137 0.161404+ , sRGB 0.993851 0.759304 0.159092, sRGB 0.993482 0.765499 0.156891+ , sRGB 0.993033 0.771720 0.154808, sRGB 0.992505 0.777967 0.152855+ , sRGB 0.991897 0.784239 0.151042, sRGB 0.991209 0.790537 0.149377+ , sRGB 0.990439 0.796859 0.147870, sRGB 0.989587 0.803205 0.146529+ , sRGB 0.988648 0.809579 0.145357, sRGB 0.987621 0.815978 0.144363+ , sRGB 0.986509 0.822401 0.143557, sRGB 0.985314 0.828846 0.142945+ , sRGB 0.984031 0.835315 0.142528, sRGB 0.982653 0.841812 0.142303+ , sRGB 0.981190 0.848329 0.142279, sRGB 0.979644 0.854866 0.142453+ , sRGB 0.977995 0.861432 0.142808, sRGB 0.976265 0.868016 0.143351+ , sRGB 0.974443 0.874622 0.144061, sRGB 0.972530 0.881250 0.144923+ , sRGB 0.970533 0.887896 0.145919, sRGB 0.968443 0.894564 0.147014+ , sRGB 0.966271 0.901249 0.148180, sRGB 0.964021 0.907950 0.149370+ , sRGB 0.961681 0.914672 0.150520, sRGB 0.959276 0.921407 0.151566+ , sRGB 0.956808 0.928152 0.152409, sRGB 0.954287 0.934908 0.152921+ , sRGB 0.951726 0.941671 0.152925, sRGB 0.949151 0.948435 0.152178+ , sRGB 0.946602 0.955190 0.150328, sRGB 0.944152 0.961916 0.146861+ , sRGB 0.941896 0.968590 0.140956, sRGB 0.940015 0.975158 0.131326+ ]++-- | The viridis colour map taken from https://bids.github.io/colormap/.+-- This is the default colour map.+--+-- <<diagrams/src_Plots_Style_viridisBar.svg#diagram=viridisBar&width=600>>+viridis :: ColourMap+viridis = colourMap $ zip [1..]+ [ sRGB 0.267004 0.004874 0.329415, sRGB 0.268510 0.009605 0.335427+ , sRGB 0.269944 0.014625 0.341379, sRGB 0.271305 0.019942 0.347269+ , sRGB 0.272594 0.025563 0.353093, sRGB 0.273809 0.031497 0.358853+ , sRGB 0.274952 0.037752 0.364543, sRGB 0.276022 0.044167 0.370164+ , sRGB 0.277018 0.050344 0.375715, sRGB 0.277941 0.056324 0.381191+ , sRGB 0.278791 0.062145 0.386592, sRGB 0.279566 0.067836 0.391917+ , sRGB 0.280267 0.073417 0.397163, sRGB 0.280894 0.078907 0.402329+ , sRGB 0.281446 0.084320 0.407414, sRGB 0.281924 0.089666 0.412415+ , sRGB 0.282327 0.094955 0.417331, sRGB 0.282656 0.100196 0.422160+ , sRGB 0.282910 0.105393 0.426902, sRGB 0.283091 0.110553 0.431554+ , sRGB 0.283197 0.115680 0.436115, sRGB 0.283229 0.120777 0.440584+ , sRGB 0.283187 0.125848 0.444960, sRGB 0.283072 0.130895 0.449241+ , sRGB 0.282884 0.135920 0.453427, sRGB 0.282623 0.140926 0.457517+ , sRGB 0.282290 0.145912 0.461510, sRGB 0.281887 0.150881 0.465405+ , sRGB 0.281412 0.155834 0.469201, sRGB 0.280868 0.160771 0.472899+ , sRGB 0.280255 0.165693 0.476498, sRGB 0.279574 0.170599 0.479997+ , sRGB 0.278826 0.175490 0.483397, sRGB 0.278012 0.180367 0.486697+ , sRGB 0.277134 0.185228 0.489898, sRGB 0.276194 0.190074 0.493001+ , sRGB 0.275191 0.194905 0.496005, sRGB 0.274128 0.199721 0.498911+ , sRGB 0.273006 0.204520 0.501721, sRGB 0.271828 0.209303 0.504434+ , sRGB 0.270595 0.214069 0.507052, sRGB 0.269308 0.218818 0.509577+ , sRGB 0.267968 0.223549 0.512008, sRGB 0.266580 0.228262 0.514349+ , sRGB 0.265145 0.232956 0.516599, sRGB 0.263663 0.237631 0.518762+ , sRGB 0.262138 0.242286 0.520837, sRGB 0.260571 0.246922 0.522828+ , sRGB 0.258965 0.251537 0.524736, sRGB 0.257322 0.256130 0.526563+ , sRGB 0.255645 0.260703 0.528312, sRGB 0.253935 0.265254 0.529983+ , sRGB 0.252194 0.269783 0.531579, sRGB 0.250425 0.274290 0.533103+ , sRGB 0.248629 0.278775 0.534556, sRGB 0.246811 0.283237 0.535941+ , sRGB 0.244972 0.287675 0.537260, sRGB 0.243113 0.292092 0.538516+ , sRGB 0.241237 0.296485 0.539709, sRGB 0.239346 0.300855 0.540844+ , sRGB 0.237441 0.305202 0.541921, sRGB 0.235526 0.309527 0.542944+ , sRGB 0.233603 0.313828 0.543914, sRGB 0.231674 0.318106 0.544834+ , sRGB 0.229739 0.322361 0.545706, sRGB 0.227802 0.326594 0.546532+ , sRGB 0.225863 0.330805 0.547314, sRGB 0.223925 0.334994 0.548053+ , sRGB 0.221989 0.339161 0.548752, sRGB 0.220057 0.343307 0.549413+ , sRGB 0.218130 0.347432 0.550038, sRGB 0.216210 0.351535 0.550627+ , sRGB 0.214298 0.355619 0.551184, sRGB 0.212395 0.359683 0.551710+ , sRGB 0.210503 0.363727 0.552206, sRGB 0.208623 0.367752 0.552675+ , sRGB 0.206756 0.371758 0.553117, sRGB 0.204903 0.375746 0.553533+ , sRGB 0.203063 0.379716 0.553925, sRGB 0.201239 0.383670 0.554294+ , sRGB 0.199430 0.387607 0.554642, sRGB 0.197636 0.391528 0.554969+ , sRGB 0.195860 0.395433 0.555276, sRGB 0.194100 0.399323 0.555565+ , sRGB 0.192357 0.403199 0.555836, sRGB 0.190631 0.407061 0.556089+ , sRGB 0.188923 0.410910 0.556326, sRGB 0.187231 0.414746 0.556547+ , sRGB 0.185556 0.418570 0.556753, sRGB 0.183898 0.422383 0.556944+ , sRGB 0.182256 0.426184 0.557120, sRGB 0.180629 0.429975 0.557282+ , sRGB 0.179019 0.433756 0.557430, sRGB 0.177423 0.437527 0.557565+ , sRGB 0.175841 0.441290 0.557685, sRGB 0.174274 0.445044 0.557792+ , sRGB 0.172719 0.448791 0.557885, sRGB 0.171176 0.452530 0.557965+ , sRGB 0.169646 0.456262 0.558030, sRGB 0.168126 0.459988 0.558082+ , sRGB 0.166617 0.463708 0.558119, sRGB 0.165117 0.467423 0.558141+ , sRGB 0.163625 0.471133 0.558148, sRGB 0.162142 0.474838 0.558140+ , sRGB 0.160665 0.478540 0.558115, sRGB 0.159194 0.482237 0.558073+ , sRGB 0.157729 0.485932 0.558013, sRGB 0.156270 0.489624 0.557936+ , sRGB 0.154815 0.493313 0.557840, sRGB 0.153364 0.497000 0.557724+ , sRGB 0.151918 0.500685 0.557587, sRGB 0.150476 0.504369 0.557430+ , sRGB 0.149039 0.508051 0.557250, sRGB 0.147607 0.511733 0.557049+ , sRGB 0.146180 0.515413 0.556823, sRGB 0.144759 0.519093 0.556572+ , sRGB 0.143343 0.522773 0.556295, sRGB 0.141935 0.526453 0.555991+ , sRGB 0.140536 0.530132 0.555659, sRGB 0.139147 0.533812 0.555298+ , sRGB 0.137770 0.537492 0.554906, sRGB 0.136408 0.541173 0.554483+ , sRGB 0.135066 0.544853 0.554029, sRGB 0.133743 0.548535 0.553541+ , sRGB 0.132444 0.552216 0.553018, sRGB 0.131172 0.555899 0.552459+ , sRGB 0.129933 0.559582 0.551864, sRGB 0.128729 0.563265 0.551229+ , sRGB 0.127568 0.566949 0.550556, sRGB 0.126453 0.570633 0.549841+ , sRGB 0.125394 0.574318 0.549086, sRGB 0.124395 0.578002 0.548287+ , sRGB 0.123463 0.581687 0.547445, sRGB 0.122606 0.585371 0.546557+ , sRGB 0.121831 0.589055 0.545623, sRGB 0.121148 0.592739 0.544641+ , sRGB 0.120565 0.596422 0.543611, sRGB 0.120092 0.600104 0.542530+ , sRGB 0.119738 0.603785 0.541400, sRGB 0.119512 0.607464 0.540218+ , sRGB 0.119423 0.611141 0.538982, sRGB 0.119483 0.614817 0.537692+ , sRGB 0.119699 0.618490 0.536347, sRGB 0.120081 0.622161 0.534946+ , sRGB 0.120638 0.625828 0.533488, sRGB 0.121380 0.629492 0.531973+ , sRGB 0.122312 0.633153 0.530398, sRGB 0.123444 0.636809 0.528763+ , sRGB 0.124780 0.640461 0.527068, sRGB 0.126326 0.644107 0.525311+ , sRGB 0.128087 0.647749 0.523491, sRGB 0.130067 0.651384 0.521608+ , sRGB 0.132268 0.655014 0.519661, sRGB 0.134692 0.658636 0.517649+ , sRGB 0.137339 0.662252 0.515571, sRGB 0.140210 0.665859 0.513427+ , sRGB 0.143303 0.669459 0.511215, sRGB 0.146616 0.673050 0.508936+ , sRGB 0.150148 0.676631 0.506589, sRGB 0.153894 0.680203 0.504172+ , sRGB 0.157851 0.683765 0.501686, sRGB 0.162016 0.687316 0.499129+ , sRGB 0.166383 0.690856 0.496502, sRGB 0.170948 0.694384 0.493803+ , sRGB 0.175707 0.697900 0.491033, sRGB 0.180653 0.701402 0.488189+ , sRGB 0.185783 0.704891 0.485273, sRGB 0.191090 0.708366 0.482284+ , sRGB 0.196571 0.711827 0.479221, sRGB 0.202219 0.715272 0.476084+ , sRGB 0.208030 0.718701 0.472873, sRGB 0.214000 0.722114 0.469588+ , sRGB 0.220124 0.725509 0.466226, sRGB 0.226397 0.728888 0.462789+ , sRGB 0.232815 0.732247 0.459277, sRGB 0.239374 0.735588 0.455688+ , sRGB 0.246070 0.738910 0.452024, sRGB 0.252899 0.742211 0.448284+ , sRGB 0.259857 0.745492 0.444467, sRGB 0.266941 0.748751 0.440573+ , sRGB 0.274149 0.751988 0.436601, sRGB 0.281477 0.755203 0.432552+ , sRGB 0.288921 0.758394 0.428426, sRGB 0.296479 0.761561 0.424223+ , sRGB 0.304148 0.764704 0.419943, sRGB 0.311925 0.767822 0.415586+ , sRGB 0.319809 0.770914 0.411152, sRGB 0.327796 0.773980 0.406640+ , sRGB 0.335885 0.777018 0.402049, sRGB 0.344074 0.780029 0.397381+ , sRGB 0.352360 0.783011 0.392636, sRGB 0.360741 0.785964 0.387814+ , sRGB 0.369214 0.788888 0.382914, sRGB 0.377779 0.791781 0.377939+ , sRGB 0.386433 0.794644 0.372886, sRGB 0.395174 0.797475 0.367757+ , sRGB 0.404001 0.800275 0.362552, sRGB 0.412913 0.803041 0.357269+ , sRGB 0.421908 0.805774 0.351910, sRGB 0.430983 0.808473 0.346476+ , sRGB 0.440137 0.811138 0.340967, sRGB 0.449368 0.813768 0.335384+ , sRGB 0.458674 0.816363 0.329727, sRGB 0.468053 0.818921 0.323998+ , sRGB 0.477504 0.821444 0.318195, sRGB 0.487026 0.823929 0.312321+ , sRGB 0.496615 0.826376 0.306377, sRGB 0.506271 0.828786 0.300362+ , sRGB 0.515992 0.831158 0.294279, sRGB 0.525776 0.833491 0.288127+ , sRGB 0.535621 0.835785 0.281908, sRGB 0.545524 0.838039 0.275626+ , sRGB 0.555484 0.840254 0.269281, sRGB 0.565498 0.842430 0.262877+ , sRGB 0.575563 0.844566 0.256415, sRGB 0.585678 0.846661 0.249897+ , sRGB 0.595839 0.848717 0.243329, sRGB 0.606045 0.850733 0.236712+ , sRGB 0.616293 0.852709 0.230052, sRGB 0.626579 0.854645 0.223353+ , sRGB 0.636902 0.856542 0.216620, sRGB 0.647257 0.858400 0.209861+ , sRGB 0.657642 0.860219 0.203082, sRGB 0.668054 0.861999 0.196293+ , sRGB 0.678489 0.863742 0.189503, sRGB 0.688944 0.865448 0.182725+ , sRGB 0.699415 0.867117 0.175971, sRGB 0.709898 0.868751 0.169257+ , sRGB 0.720391 0.870350 0.162603, sRGB 0.730889 0.871916 0.156029+ , sRGB 0.741388 0.873449 0.149561, sRGB 0.751884 0.874951 0.143228+ , sRGB 0.762373 0.876424 0.137064, sRGB 0.772852 0.877868 0.131109+ , sRGB 0.783315 0.879285 0.125405, sRGB 0.793760 0.880678 0.120005+ , sRGB 0.804182 0.882046 0.114965, sRGB 0.814576 0.883393 0.110347+ , sRGB 0.824940 0.884720 0.106217, sRGB 0.835270 0.886029 0.102646+ , sRGB 0.845561 0.887322 0.099702, sRGB 0.855810 0.888601 0.097452+ , sRGB 0.866013 0.889868 0.095953, sRGB 0.876168 0.891125 0.095250+ , sRGB 0.886271 0.892374 0.095374, sRGB 0.896320 0.893616 0.096335+ , sRGB 0.906311 0.894855 0.098125, sRGB 0.916242 0.896091 0.100717+ , sRGB 0.926106 0.897330 0.104071, sRGB 0.935904 0.898570 0.108131+ , sRGB 0.945636 0.899815 0.112838, sRGB 0.955300 0.901065 0.118128+ , sRGB 0.964894 0.902323 0.123941, sRGB 0.974417 0.903590 0.130215+ , sRGB 0.983868 0.904867 0.136897, sRGB 0.993248 0.906157 0.143936+ ]+
+ src/Plots/Types.hs view
@@ -0,0 +1,755 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- This module defines the various types for holding plots:+--+-- [@'PlotOptions' b v n@]+-- Generic options all plots have.+--+-- [@'PlotMods' b v n@]+-- Includes 'PlotOptions' along with modifications to the 'PlotStyle'.+--+-- [@'Plot' p b@]+-- A 'rawPlot' @p@ grouped with a 'PlotMods'.+--+-- [@'DynamicPlot' b v n@]+-- A wrapped up 'Plot' so it can be stored in an 'Axis'.+--+-- [@'StyledPlot' b v n@]+-- A 'DynamicPlot' with a concrete 'PlotStyle', ready to be rendered.+--+-- As well as other things like the 'Plotable' class, 'LegendEntries',+-- 'HasOrientation' and 'HasVisibility'.+--+----------------------------------------------------------------------------+module Plots.Types+ (++ -- * Plot options+ PlotOptions+ , HasPlotOptions (..)+ , key+ , addLegendEntry++ -- ** Plot modifications+ , PlotMods+ , plotMods++ -- * Plotable class+ , Plotable (..)++ -- * Plot types+ -- ** Parameterised plot+ , Plot+ , mkPlot+ , rawPlot++ -- ** Dynamic plot+ , DynamicPlot (..)+ , _DynamicPlot+ , dynamicPlot+ , dynamicPlotMods++ -- ** Styled plot+ , StyledPlot+ , styledPlot+ , styleDynamic+ , renderStyledPlot+ , singleStyledPlotLegend+ , styledPlotLegends++ -- * Miscellaneous+ -- ** Visibility+ , HasVisibility (..)+ , hide+ , display++ -- ** Orientation+ , Orientation (..)+ , HasOrientation (..)+ , orient+ , horizontal+ , vertical++ -- ** Legend entries+ , LegendEntry+ , LegendPic (..)+ , mkLegendEntry+ , legendPicture+ , legendText+ , legendPrecedence++ -- ** Axis spec+ , AxisSpec (..)+ , specTrans+ , specBounds+ , specScale+ , scaleNum+ , specPoint+ , specColourMap++ -- ** Positioning+ , Placement (..)+ , HasPlacement (..)+ , HasGap (..)+ , placeAgainst++ -- *** Common positions+ -- **** Inside positions+ , topLeft, top, topRight, left, right, bottomLeft, bottom+ , bottomRight++ -- **** Outside positions+ , leftAbove, leftTop, leftMid, leftBottom, leftBelow, midAbove, midBelow+ , rightAbove, rightTop, rightMid, rightBottom, rightBelow++ ) where++import Control.Monad.State+import Data.Bool+import Data.Maybe (fromMaybe)+import Data.Orphans ()+import Data.Typeable+import Data.List (sortOn)+import Diagrams.Prelude as D++#if __GLASGOW_HASKELL__ < 710+import Data.Foldable (Foldable)+#endif++import Plots.Style+import Plots.Axis.Scale+import Plots.Util++-- Orientation ---------------------------------------------------------++data Orientation = Horizontal | Vertical+ deriving (Show, Eq, Ord, Typeable)++-- | Pick the first @a@ if the object has 'Horizontal' orientation and+-- the second @a@ if the object has a 'Vertical' orientation.+orient :: HasOrientation o => o -> a -> a -> a+orient o h v =+ case view orientation o of+ Horizontal -> h+ Vertical -> v++-- | Class of things that have an orientation.+class HasOrientation a where+ -- | Lens onto the orientation of an object.+ orientation :: Lens' a Orientation++instance HasOrientation Orientation where+ orientation = id++-- | Lens onto whether an object's orientation is horizontal.+horizontal :: HasOrientation a => Lens' a Bool+horizontal = orientation . iso (==Horizontal) (bool Vertical Horizontal)++-- | Lens onto whether an object's orientation is vertical.+vertical :: HasOrientation a => Lens' a Bool+vertical = horizontal . involuted not++------------------------------------------------------------------------+-- Placement+------------------------------------------------------------------------++class HasGap a where+ -- | The value of the gap when rendering.+ gap :: Lens' a (N a)++-- | A 'Position' is a point on an axis together with an anchor and a+-- direction for the gap.+data Placement = Placement+ { pAt :: V2 Rational+ , pAnchor :: V2 Rational+ , pGapDir :: Direction V2 Rational+ }+ deriving (Show, Read, Eq, Ord)+ -- In the future the axis position may be replaced by a reader-like+ -- anchor system where you can choose parts of the rendered axis as a+ -- position.+ -- we keep posGap and posGapDir as separate values to keep lens laws+ -- for 0 gaps+ -- I'm not sure this should work for a 3D axis++class HasPlacement a where+ placement :: Lens' a Placement++ -- | The position relative to the axis. @V2 0 0@ corresponds to the+ -- bottom left corner, @V2 1 1@ is the top right corner.+ placementAt :: Lens' a (V2 Rational)+ placementAt = placement . lens pAt (\p a -> p {pAt = a})++ -- | The anchor used for the object being positioned. @V2 0 0@+ -- corresponds to the bottom left corner, @V2 1 1@ is the top right+ -- corner.+ placementAnchor :: Lens' a (V2 Rational)+ placementAnchor = placement . lens pAnchor (\p a -> p {pAnchor = a})++ -- | The direction to extend the 'gap' when positioning.+ gapDirection :: Lens' a (Direction V2 Rational)+ gapDirection = placement . lens pGapDir (\p a -> p {pGapDir = a})++instance HasPlacement Placement where+ placement = id++-- Inside positions ----------------------------------------------------++-- Internal helper for all inside placements+pInside :: V2 Rational -> Placement+pInside v = Placement+ { pAt = v+ , pAnchor = v+ , pGapDir = dirBetween' (P v) origin+ }++-- | @dirBetween p q@ returns the directions from @p@ to @q@+dirBetween' :: (Additive v, Num n) => Point v n -> Point v n -> Direction v n+dirBetween' p q = direction $ q .-. p+++topLeft, top, topRight, left, right, bottomLeft, bottom, bottomRight :: Placement+topLeft = pInside (V2 (-1) 1 )+top = pInside (V2 0 1 )+topRight = pInside (V2 1 1 )+left = pInside (V2 (-1) 0 )+right = pInside (V2 (-1) 0 )+bottomLeft = pInside (V2 (-1) (-1))+bottom = pInside (V2 0 (-1))+bottomRight = pInside (V2 1 (-1))++-- Outside positions ---------------------------------------------------++leftAbove, leftTop, leftMid, leftBottom, leftBelow, midAbove, midBelow,+ rightAbove, rightTop, rightMid, rightBottom, rightBelow :: Placement++leftAbove = Placement (V2 (-1) 1 ) (V2 (-1) (-1)) (direction (V2 0 1 ))+leftTop = Placement (V2 (-1) 1 ) (V2 1 1 ) (direction (V2 (-1) 0 ))+leftMid = Placement (V2 (-1) 0 ) (V2 1 0 ) (direction (V2 (-1) 0 ))+leftBottom = Placement (V2 (-1) (-1)) (V2 1 (-1)) (direction (V2 (-1) 0 ))+leftBelow = Placement (V2 (-1) (-1)) (V2 (-1) 1 ) (direction (V2 0 (-1)))++midAbove = Placement (V2 0 1 ) (V2 0 (-1)) (direction (V2 0 1 ))+midBelow = Placement (V2 0 (-1)) (V2 0 1 ) (direction (V2 0 (-1)))++rightAbove = Placement (V2 1 1 ) (V2 1 (-1)) (direction (V2 0 1 ))+rightTop = Placement (V2 1 1 ) (V2 (-1) 1 ) (direction (V2 1 0 ))+rightMid = Placement (V2 1 0 ) (V2 (-1) 0 ) (direction (V2 1 0 ))+rightBottom = Placement (V2 1 (-1)) (V2 (-1) (-1)) (direction (V2 1 0 ))+rightBelow = Placement (V2 1 (-1)) (V2 1 1 ) (direction (V2 0 (-1)))++-- Using positions -----------------------------------------------------++-- | A tool for aligned one object to another. Positions @b@ around the+-- bounding box of @a@ by translating @b@.+placeAgainst+ :: (InSpace V2 n a, SameSpace a b, Enveloped a,+ HasOrigin b, Alignable b)+ => a -> Placement -> n -> b -> b+placeAgainst a (Placement (V2 px py) (V2 ax ay) d) n b+ = b # anchor+ # moveTo (pos .+^ n *^ fromDirection (fmap fromRational d))+ where+ pos = mkP2 (lerp' px xu xl) (lerp' py yu yl)+ anchor = alignBy unitX (fromRational ax) . alignBy unitY (fromRational ay)+ (P (V2 xl yl), P (V2 xu yu)) = fromMaybe (origin, origin) (getCorners $ boundingBox a)++ lerp' z u v = fromRational alpha * u + (1 - fromRational alpha) * v+ where alpha = (z + 1) / 2++------------------------------------------------------------------------+-- Legend entries+------------------------------------------------------------------------++-- | Type allowing use of the default legend picture (depending on the+-- plot) or a custom legend picture with access to the 'PlotStyle'.+data LegendPic b v n+ = DefaultLegendPic+ | CustomLegendPic (PlotStyle b v n -> QDiagram b v n Any)++instance Default (LegendPic b v n) where+ def = DefaultLegendPic++-- | Data type for holding a legend entry.+data LegendEntry b v n = LegendEntry+ { lPic :: LegendPic b v n+ , lText :: String+ , lPrecedence :: n+ } deriving Typeable++-- | The picture used in the legend entry.+legendPicture :: Lens' (LegendEntry b v n) (LegendPic b v n)+legendPicture = lens lPic (\l pic -> l {lPic = pic})++-- | The text used in the legend entry.+legendText :: Lens' (LegendEntry b v n) String+legendText = lens lText (\l txt -> l {lText = txt})++-- | The order in which the legend entries are rendered. If precedence+-- are equal, they entries are put in the order they are added to the+-- axis.+--+-- Default is @0@.+legendPrecedence :: Lens' (LegendEntry b v n) n+legendPrecedence = lens lPrecedence (\l n -> l {lPrecedence = n})++type instance V (LegendEntry b v n) = v+type instance N (LegendEntry b v n) = n++-- | Make a legend entry with a default 'legendPicture' and+-- 'legendPrecedence' 0 using the string as the 'legendText'.+mkLegendEntry :: Num n => String -> LegendEntry b v n+mkLegendEntry x = LegendEntry DefaultLegendPic x 0++------------------------------------------------------------------------+-- Plot attributes+------------------------------------------------------------------------++-- Generic Plot info++-- | Data type for holding information all plots must contain.+data PlotOptions b v n = PlotOptions+ { poName :: Name+ , poClipPlot :: Bool+ , poLegend :: [LegendEntry b v n]+ , poVisible :: Bool+ , poTransform :: Transformation v n+ -- , poPostPlotBoundingBox :: BoundingBox v n -> BoundingBox v n+ -- , poPlotPostProduction :: QDiagram b v n Any -> QDiagram b v n Any+ } deriving Typeable++type instance V (PlotOptions b v n) = v+type instance N (PlotOptions b v n) = n++-- | Class of things that have 'PlotOptions'.+class HasPlotOptions f a b | a -> b where+ {-# MINIMAL plotOptions #-}+ -- | Lens onto the 'PlotOptions'.+ plotOptions :: LensLike' f a (PlotOptions b (V a) (N a))++ -- | The 'Name' applied to the plot. This gives a way to reference a+ -- specific plot in a rendered axis.+ --+ -- 'Default' is 'mempty'.+ plotName :: Functor f => LensLike' f a Name+ plotName = plotOptions . lens poName (\g a -> g {poName = a})+ {-# INLINE plotName #-}++ -- | Whether the plot should be clipped to the bounds of the axes.+ --+ -- 'Default' is 'True'.+ clipPlot :: Functor f => LensLike' f a Bool+ clipPlot = plotOptions . lens poClipPlot (\g a -> g {poClipPlot = a})+ {-# INLINE clipPlot #-}++ -- | The legend entries to be used for the current plot.+ --+ -- 'Default' is 'mempty'.+ legendEntries :: Functor f => LensLike' f a [LegendEntry b (V a) (N a)]+ legendEntries = plotOptions . lens poLegend (\g a -> g {poLegend = a})+ {-# INLINE legendEntries #-}++ -- | The transform applied to the plot once it's in the axis+ -- coordinates.+ --+ -- 'Default' is 'mempty'.+ plotTransform :: Functor f => LensLike' f a (Transformation (V a) (N a))+ plotTransform = plotOptions . lens poTransform (\g a -> g {poTransform = a})+ {-# INLINE plotTransform #-}++ -- | Whether or not the plot should be shown. The 'BoundingBox' of the+ -- plot will still affect the inferred axis bounds.+ --+ -- 'Default' is 'True'.+ plotVisible :: Functor f => LensLike' f a Bool+ plotVisible = plotOptions . lens poVisible (\po b -> po {poVisible = b})+ {-# INLINE plotVisible #-}++instance (Additive v, Num n) => Default (PlotOptions b v n) where+ def = PlotOptions+ { poName = mempty+ , poClipPlot = True+ , poLegend = []+ , poVisible = True+ , poTransform = mempty+ -- , poPostPlotBoundingBox = id+ -- , poPlotPostProduction = id+ }++instance HasPlotOptions f (PlotOptions b v n) b where+ plotOptions = id+ {-# INLINE plotOptions #-}++instance (HasLinearMap v, Num n) => Transformable (PlotOptions b v n) where+ transform = over plotTransform . transform++-- instance HasBounds (PlotOptions b v n) v where+-- bounds = plotBounds++-- | Move origin by applying to @plotTransform@.+instance (Additive v, Num n) => HasOrigin (PlotOptions b v n) where+ moveOriginTo = over plotTransform . moveOriginTo++instance Qualifiable (PlotOptions b v n) where+ n .>> p = over plotName (n .>>) p++-- XXX template haskell getting in the way+-- instance HasVisibility (PlotOptions b v n) where+-- visible = plotVisible++-- | Add a 'LegendEntry' to something with 'PlotOptions' using the+-- 'String' as the 'legendText' and a 'DefaultLegendPic'. Here are+-- some typical examples:+--+-- @+-- 'key' :: 'String' -> 'State' ('Plot' ('ScatterPlot' v n) b) ()+-- 'key' :: 'String' -> 'State' ('DynamicPlot' b v n) ()+-- 'key' :: 'String' -> 'State' ('PlotMods' b v n) ()+-- @+--+-- If you only care about the name of the legend, use 'key'.+key :: (HasPlotOptions Identity a b, MonadState a m, Num (N a)) => String -> m ()+key = addLegendEntry . mkLegendEntry++-- | Add a 'LegendEntry' to something with 'PlotOptions'. Here are some+-- typical examples:+--+-- @+-- 'addLegendEntry' :: 'LegendEntry' b v n -> 'State' ('Plot' ('ScatterPlot' v n) b) ()+-- 'addLegendEntry' :: 'LegendEntry' b v n -> 'State' ('DynamicPlot' b v n) ()+-- @+--+-- If you only care about the name of the legend, use 'key'.+addLegendEntry+ :: (HasPlotOptions Identity a b, MonadState a m)+ => LegendEntry b (V a) (N a)+ -> m ()+addLegendEntry l = legendEntries <>= [l]++-- zeroInt :: Additive v => v Int+-- zeroInt = zero++------------------------------------------------------------------------+-- AxisSpec+------------------------------------------------------------------------++-- | Information from the 'Plots.Axis.Axis' necessary to render a 'Plotable'.+data AxisSpec v n = AxisSpec+ { _specBounds :: v (n, n)+ , _specTrans :: Transformation v n+ , _specScale :: v LogScale+ , _specColourMap :: ColourMap+ }++makeLenses ''AxisSpec++type instance V (AxisSpec v n) = v+type instance N (AxisSpec v n) = n++-- | Scale a number by log10-ing it and linearly scaling it so it's+-- within the same range.+scaleNum :: Floating n => (n, n) -> LogScale -> n -> n+scaleNum (a,b) s x = case s of+ LinearAxis -> x+ LogAxis -> subtract a $ (b / logBase 10 d) * (logBase 10 x)+ where d = b - a++-- | Apply log scaling and the transform to a point.+specPoint :: (Applicative v, Additive v, Floating n) => AxisSpec v n -> Point v n -> Point v n+specPoint (AxisSpec bs tr ss _) p =+ papply tr $ over _Point (scaleNum <$> bs <*> ss <*>) p++------------------------------------------------------------------------+-- Plotable class+------------------------------------------------------------------------++-- | Class defining how plots should be rendered.+class (Typeable p, Enveloped p) => Plotable p b where+ -- | Render a plot according to the 'AxisSpec', using the 'PlotStyle'.+ renderPlotable+ :: InSpace v n p+ => AxisSpec v n+ -> PlotStyle b v n+ -> p+ -> QDiagram b v n Any++ -- | The default legend picture when the 'LegendPic' is+ -- 'DefaultLegendPic'.+ defLegendPic+ :: InSpace v n p+ => PlotStyle b v n+ -> p+ -> QDiagram b v n Any+ defLegendPic = mempty++instance (Typeable b, Typeable v, Metric v, Typeable n, OrderedField n)+ => Plotable (QDiagram b v n Any) b where+ renderPlotable s _ dia = dia # transform (s^.specTrans)++instance (TypeableFloat n, Renderable (Path V2 n) b) => Plotable (Path V2 n) b where+ renderPlotable s sty path+ = stroke path+ # transform (s^.specTrans)+ # applyLineStyle sty++ defLegendPic sty _+ = (p2 (-10,0) ~~ p2 (10,0))+ # applyLineStyle sty++------------------------------------------------------------------------+-- Visibility+------------------------------------------------------------------------++-- | Class of objects that can be hidden.+class HasVisibility a where+ -- | Lens onto whether an object should be visible when rendered.+ visible :: Lens' a Bool++ -- | The opposite of 'visible'.+ hidden :: Lens' a Bool+ hidden = visible . involuted not+ {-# INLINE hidden #-}++instance HasVisibility (PlotOptions b v n) where+ visible = plotVisible++instance HasVisibility (PlotMods b v n) where+ visible = plotVisible++instance HasVisibility (Plot p b) where+ visible = plotVisible++instance HasVisibility (DynamicPlot b v n) where+ visible = plotVisible++instance HasVisibility (StyledPlot b v n) where+ visible = plotVisible++-- | Set 'visible' to 'False' for the given setter.+--+-- @+-- 'hide' 'minorTicks' :: 'State' ('Axis' b v n) ()+-- 'hide' ('xAxis' . 'gridLines') :: 'State' ('Axis' b v n) ()+-- @+hide :: (MonadState s m, HasVisibility a) => ASetter' s a -> m ()+hide l = l . visible .= False++-- | Set 'visible' to 'True' for the given setter.+--+-- @+-- 'display' 'minorGridLines' :: 'State' ('Axis' b v n) ()+-- 'display' 'colourBar' :: 'State' ('Axis' b v n) ()+-- @+display :: (MonadState s m, HasVisibility a) => ASetter' s a -> m ()+display l = l . visible .= True++------------------------------------------------------------------------+-- Plot modification+------------------------------------------------------------------------++-- | A 'PlotOptions' with modifications to a 'PlotStyle'.+data PlotMods b v n+ = PlotMods (PlotOptions b v n) (PlotStyle b v n -> PlotStyle b v n)++type instance V (PlotMods b v n) = v+type instance N (PlotMods b v n) = n++instance Functor f => HasPlotOptions f (PlotMods b v n) b where+ plotOptions f (PlotMods opts sty) = f opts <&> \opts' -> PlotMods opts' sty++instance Settable f => HasPlotStyle f (PlotMods b v n) b where+ plotStyle = sty . mapped where+ sty f (PlotMods opts s) = f s <&> \s' -> PlotMods opts s'++instance (Additive v, Num n) => Default (PlotMods b v n) where+ def = PlotMods def id++------------------------------------------------------------------------+-- Plot type+------------------------------------------------------------------------++-- | A parameterised plot, together with a 'PlotMods'. This type has an+-- instance of many classes for modifying specific plots.+data Plot p b =+ Plot p+ (PlotOptions b (V p) (N p))+ (PlotStyle b (V p) (N p) -> PlotStyle b (V p) (N p))+ deriving Typeable++type instance V (Plot p b) = V p+type instance N (Plot p b) = N p++instance Functor f => HasPlotOptions f (Plot p b) b where+ plotOptions f (Plot p opts sty) = f opts <&> \opts' -> Plot p opts' sty++instance Settable f => HasPlotStyle f (Plot p b) b where+ plotStyle = sty . mapped where+ sty f (Plot p opts s) = f s <&> \s' -> Plot p opts s'++instance HasOrientation p => HasOrientation (Plot p b) where+ orientation = rawPlot . orientation++-- | Make a 'Plot' with 'Default' 'PlotOptions'.+mkPlot :: (Additive (V p), Num (N p)) => p -> Plot p b+mkPlot p = Plot p def id++-- | Lens onto the raw 'Plotable' inside a 'Plot'.+rawPlot :: SameSpace p p' => Lens (Plot p b) (Plot p' b) p p'+rawPlot f (Plot p opts ps) = f p <&> \p' -> Plot p' opts ps++-- | The modifications to the 'PlotOptions' and 'PlotStyle' in a 'Plot'.+plotMods :: Lens' (Plot p b) (PlotMods b (V p) (N p))+plotMods f (Plot p opts ps) =+ f (PlotMods opts ps) <&> \(PlotMods opts' ps') -> Plot p opts' ps'++------------------------------------------------------------------------+-- DynamicPlot+------------------------------------------------------------------------++-- | A wrapped up 'Plot', used to store plots in an 'Axis'.+data DynamicPlot b v n where+ DynamicPlot :: (InSpace v n p, Plotable p b) => Plot p b -> DynamicPlot b v n+ deriving Typeable++type instance V (DynamicPlot b v n) = v+type instance N (DynamicPlot b v n) = n++-- | Prism for a 'DynamicPlot'.+_DynamicPlot :: (Plotable p b, Typeable b) => Prism' (DynamicPlot b (V p) (N p)) (Plot p b)+_DynamicPlot = prism' DynamicPlot (\(DynamicPlot p) -> cast p)++-- | Traversal over the dynamic plot without the Plotable constraint+-- '_DynamicPlot' has.+dynamicPlot :: forall p b. (Typeable p, Typeable b)+ => Traversal' (DynamicPlot b (V p) (N p)) (Plot p b)+dynamicPlot f d@(DynamicPlot p) =+ case eq p of+ Just Refl -> f p <&> \p' -> DynamicPlot p'+ Nothing -> pure d+ where eq :: Typeable a => a -> Maybe (a :~: Plot p b)+ eq _ = eqT+instance Functor f => HasPlotOptions f (DynamicPlot b v n) b where+ plotOptions f (DynamicPlot (Plot p opts sty)) =+ f opts <&> \opts' -> DynamicPlot (Plot p opts' sty)++instance Settable f => HasPlotStyle f (DynamicPlot b v n) b where+ plotStyle = sty . mapped where+ sty :: Setter' (DynamicPlot b v n) (PlotStyle b v n -> PlotStyle b v n)+ sty f (DynamicPlot (Plot p opts s)) = f s <&> \s' -> DynamicPlot (Plot p opts s')++-- | The modifications to the 'PlotOptions' and 'PlotStyle' in a 'DynamicPlot'.+dynamicPlotMods :: Lens' (DynamicPlot b v n) (PlotMods b v n)+dynamicPlotMods f (DynamicPlot (Plot p opts ps)) =+ f (PlotMods opts ps) <&> \(PlotMods opts' ps') -> DynamicPlot (Plot p opts' ps')++------------------------------------------------------------------------+-- StyledPlot+------------------------------------------------------------------------++-- | A 'DynamicPlot' with a concrete style. This is suitable for being+-- rendered with 'renderStyledPlot' and get extract the legend entries+-- with 'styledPlotLegend'.+--+-- You can make a 'StyledPlot' with 'styleDynamic'+data StyledPlot b v n where+ StyledPlot+ :: Plotable p b+ => p+ -> PlotOptions b (V p) (N p)+ -> PlotStyle b (V p) (N p)+ -> StyledPlot b (V p) (N p)++type instance V (StyledPlot b v n) = v+type instance N (StyledPlot b v n) = n++instance Functor f => HasPlotOptions f (StyledPlot b v n) b where+ plotOptions f (StyledPlot p opts sty) =+ f opts <&> \opts' -> StyledPlot p opts' sty++instance (Metric v, OrderedField n) => Enveloped (StyledPlot b v n) where+ getEnvelope (StyledPlot p opts _) =+ getEnvelope p & transform (poTransform opts)++instance Functor f => HasPlotStyle f (StyledPlot b v n) b where+ plotStyle f (StyledPlot p opts sty) =+ f sty <&> StyledPlot p opts++-- | Traversal over a raw plot of a styled plot. The type of the plot+-- must match for the traversal to be succesful.+styledPlot :: forall p b. Typeable p => Traversal' (StyledPlot b (V p) (N p)) p+styledPlot f s@(StyledPlot p opts sty) =+ case eq p of+ Just Refl -> f p <&> \p' -> StyledPlot p' opts sty+ Nothing -> pure s+ where eq :: Typeable a => a -> Maybe (a :~: p)+ eq _ = eqT++-- | Give a 'DynamicPlot' a concrete 'PlotStyle'.+styleDynamic :: PlotStyle b v n -> DynamicPlot b v n -> StyledPlot b v n+styleDynamic sty (DynamicPlot (Plot p opts styF)) = StyledPlot p opts (styF sty)++-- | Render a 'StyledPlot' given an and 'AxisSpec'.+renderStyledPlot+ :: TypeableFloat n+ => AxisSpec V2 n+ -> StyledPlot b V2 n+ -> QDiagram b V2 n Any+renderStyledPlot aSpec (StyledPlot p opts sty)+ = renderPlotable aSpec sty p+ & whenever (opts^.hidden) phantom+ & whenever (opts^.clipPlot) (clipTo $ specRect aSpec)++specRect :: TypeableFloat n => AxisSpec V2 n -> Path V2 n+specRect aSpec =+ rect (xU - xL) (yU - yL)+ # moveTo (mkP2 ((xU+xL)/2) ((yU+yL)/2))+ # transform t+ where+ V2 (xL,xU) (yL,yU) = _specBounds aSpec+ t = _specTrans aSpec++-- | Get the legend rendered entries from a single styled plot. The+-- resulting entries are in no particular order. See also+-- 'styledPlotLegends'.+singleStyledPlotLegend+ :: StyledPlot b v n+ -> [(n, QDiagram b v n Any, String)] -- ^ @(z-order, legend pic, legend text)@+singleStyledPlotLegend (StyledPlot p opts sty) =+ map mk (opts ^. legendEntries)+ where+ mk entry = (entry ^. legendPrecedence, pic, entry ^. legendText)+ where+ pic = case lPic entry of+ DefaultLegendPic -> defLegendPic sty p+ CustomLegendPic f -> f sty++-- | Render a list of legend entries, in order.+styledPlotLegends+ :: Ord n+ => [StyledPlot b v n]+ -> [(QDiagram b v n Any, String)] -- ^ @[(legend pic, legend text)]@+styledPlotLegends+ = map (\(_,p,t) -> (p,t))+ . sortOn (view _1)+ . concatMap singleStyledPlotLegend+
+ src/Plots/Types/Bar.hs view
@@ -0,0 +1,658 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.Bar+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- A bar plot is a plot that presents data with rectangular bars with+-- lengths proportional to the values that they represent. The bars can+-- be plotted vertically or horizontally.+--+-- <<diagrams/src_Plots_Types_Bar_multiBarExample.svg#diagram=multiBarExample&height=350>>+--+----------------------------------------------------------------------------+module Plots.Types.Bar+ (+ -- * BarPlot+ BarPlot+ , barPlot+ , barPlot'+ , namedBarPlot+ , namedBarPlot'+ , floatingBarPlot++ -- * Bar layout+ , BarLayout+ , HasBarLayout (..)++ -- * Multi bars+ -- ** Adding to axis+ , multiBars+ , MultiBarState++ -- ** Multi bar types+ , groupedBars+ , groupedBars'+ , stackedBars+ , stackedEqualBars+ , runningBars++ -- ** Modify multi bars+ , onBars+ , labelBars+++ -- * Low level constructors+ , mkBars+ , mkFloatingBars+ , mkRunningBars+ , mkStackedBars+ , mkStackedEqualBars+ , mkGroupedBars+ -- , barAxisLabels++ ) where++import Control.Lens hiding (at, none, transform, ( # ))+import Control.Monad.State+import Data.Typeable+import qualified Data.Foldable as F++import Plots.Style+import Plots.Types+import Plots.Axis+import Plots.Axis.Ticks+import Plots.Axis.Labels+import Plots.Util++import qualified Data.List as List+import Diagrams.Core.Transform (fromSymmetric)+import Linear.V2 (_yx)++import Diagrams.Prelude++-- Single bar ----------------------------------------------------------++-- | Data for a single bar. The bar is drawn as+--+-- @+-- fromCorners (V2 barPos (fst barBounds))) (V2 (barPos + barWidth) (snd barBounds))+-- @+--+-- for 'Horizontal' bars, flipped for 'Vertical'. This is a low level+-- representation of a bar and is not intended to be used directly.++-- | Construct a rectangle of size v with the bottom centre at point p.+rectB :: (InSpace V2 n t, TrailLike t) => Point V2 n -> V2 n -> t+rectB p (V2 x y) =+ trailLike $ fromOffsets [V2 x 0, V2 0 y, V2 (-x) 0] # closeTrail `at` p .-^ V2 (x/2) 0++------------------------------------------------------------------------+-- Bar layout+------------------------------------------------------------------------++-- | The way an individual bar plot or a group of bars plots are laid+-- out on the axis.+data BarLayout n = BarLayout+ { bOrient :: Orientation+ , bWidth :: n+ , bSpacing :: n+ , bStart :: n+ } deriving Typeable++instance Fractional n => Default (BarLayout n) where+ def = BarLayout Horizontal 0.8 1 1++type instance N (BarLayout n) = n++instance HasOrientation (BarLayout n) where+ orientation = lens bOrient (\bl o -> bl {bOrient = o})++-- | Class of things that have a modifiable 'BarLayout'.+class HasOrientation a => HasBarLayout a where+ -- | Lens onto the 'BarLayout'+ barLayout :: Lens' a (BarLayout (N a))++ -- | The width bar for single / stacked bars or the width of a group+ -- for grouped bar plot.+ --+ -- Default is @0.8@+ barWidth :: Lens' a (N a)+ barWidth = barLayout . lens bWidth (\bl w -> bl {bWidth = w})++ -- | The spacing between each bar or group of bars.+ --+ -- Default is @1@+ barSpacing :: Lens' a (N a)+ barSpacing = barLayout . lens bSpacing (\bl s -> bl {bSpacing = s})++ -- | The distance from the axis to centre of the first bar.+ --+ -- Default is @1@+ barStart :: Lens' a (N a)+ barStart = barLayout . lens bStart (\bl x -> bl {bStart = x})++instance HasBarLayout (BarLayout n) where+ barLayout = id++instance HasBarLayout a => HasBarLayout (Plot a b) where+ barLayout = rawPlot . barLayout++------------------------------------------------------------------------+-- Bar plot type+------------------------------------------------------------------------++-- | A bar plot for a single set of bars. Multi-bar plots are achieved+-- by having multiple 'BarPlot's. Each bar plot corresponds to a+-- single legend entry. To get multiple bar entries/colours, use+-- multiple 'BarPlots'++-- A 'BarPlot' is not intended to be constructed directly, instead use+-- one of the helper functions.+data BarPlot n = BarPlot+ { bpData :: [(n,n)]+ , bpLayout :: BarLayout n+ } deriving Typeable++type instance V (BarPlot n) = V2+type instance N (BarPlot n) = n++instance HasOrientation (BarPlot n) where+ orientation = barLayout . orientation++instance OrderedField n => Enveloped (BarPlot n) where+ getEnvelope BarPlot {..} =+ getEnvelope . orient bpLayout _reflectXY id . (id :: Path v n -> Path v n) $+ ifoldMap drawBar bpData+ where+ drawBar i (a,b) = rectB (mkP2 x a) (V2 (view barWidth bpLayout) (b - a))+ where x = view barStart bpLayout + fromIntegral i * view barSpacing bpLayout++instance (TypeableFloat n, Renderable (Path V2 n) b)+ => Plotable (BarPlot n) b where+ renderPlotable s sty BarPlot {..} =+ ifoldMap drawBar bpData+ # orient bpLayout _reflectXY id+ # applyAreaStyle sty+ # transform (s^.specTrans)+ where+ drawBar i (a,b) = rectB (mkP2 x a) (V2 (view barWidth bpLayout) (b - a))+ where x = view barStart bpLayout + fromIntegral i * view barSpacing bpLayout++ defLegendPic sty BarPlot {..}+ = centerXY+ . applyAreaStyle sty'+ . orient bpLayout _reflectXY id+ $ d+ where+ -- Multiple bars get two bars next to each other for the legend. A+ -- single bar only gets one bar in the legend.+ d | has (ix 1) bpData = alignB (rect 4 7) ||| strutX 3 ||| alignB (rect 4 10)+ | otherwise = rect 4 10++ -- The legend bars don't look right if the line width is too big so we limit it+ sty' = sty & areaStyle . _lw %~ atMost (local 0.8)++instance HasBarLayout (BarPlot n) where+ barLayout = lens bpLayout (\bp l -> bp {bpLayout = l})++------------------------------------------------------------------------+-- Constructing bar plots+------------------------------------------------------------------------++-- | Create equidistant bars using the values.+mkBars :: (Foldable f, Num n) => BarLayout n -> f n -> BarPlot n+mkBars bl (F.toList -> ns) = mkFloatingBars bl (map (0,) ns)++-- | Create equidistant bars with lower and upper bounds for each bar.+mkFloatingBars :: Foldable f => BarLayout n -> f (n,n) -> BarPlot n+mkFloatingBars bl (F.toList -> ns) = BarPlot+ { bpData = ns+ , bpLayout = bl+ }++-- | Create uniform bars from groups of data, placing one group after+-- the other.+mkRunningBars+ :: Num n+ => BarLayout n+ -> [[(n,n)]]+ -> [BarPlot n]+mkRunningBars bl = snd . foldr f (view barStart bl, [])+ where+ f d (x, bs) = (x + dx, mkFloatingBars bl {bStart = x} d : bs)+ where dx = view barSpacing bl * fromIntegral (length d)++-- | Create uniform bars from groups of data, placing one on top of the+-- other. The first list will be the same as @mkUniformBars opts (map+-- (0,) ys)@, subsequent lists will be placed on top.+mkStackedBars+ :: Num n+ => BarLayout n+ -> [[n]] -- values+ -> [BarPlot n]+mkStackedBars bl = snd . List.mapAccumR f (repeat 0)+ where+ -- y0s are the base values for this set of bars, these accumulate+ -- for each set of data+ f y0s ys = (y1s, mkFloatingBars bl ds)+ where y1s = liftU2 (+) y0s ys+ ds = zipWith (\y0 y -> (y0, y0 + y)) y0s ys++-- | Similar to 'mkMultiStacked' but stack has the same height.+mkStackedEqualBars+ :: Fractional n+ => n -- ^ value each bar reaches+ -> BarLayout n+ -> [[n]] -- ^ values+ -> [BarPlot n]+mkStackedEqualBars yM bl yss = mkStackedBars bl yss'+ where+ -- Multiplier for each bar to reach the desired height.+ ms = map (\ys -> yM / sum ys) $ List.transpose yss++ -- Normalise each data set by multiplying it with the normalising+ -- factor.+ yss' = map (zipWith (*) ms) yss++-- | Make bars that are grouped together. Each group of bars is treated+-- as a single bar when using the 'BarPlotsOpts'. There is an addition+-- parameter to adjust the width of each individual bar.+mkGroupedBars+ :: Fractional n+ => n -- ^ width factor of individual bars (1 = touching)+ -> BarLayout n+ -> [[n]]+ -> [BarPlot n]+mkGroupedBars w bl xs =+ flip imap xs $ \i ns ->+ mkBars+ bl { bStart = start' + width' * fromIntegral i+ , bWidth = width' * w+ }+ ns+ where+ n = fromIntegral $ length xs+ -- start' is such that middle of the middle bar is now at+ -- barOptsStart bo+ start' = bStart bl - (n - 1) * width' / 2+ width' = bWidth bl / n++-- temporary functions that will be in next lib release++_reflectionXY :: (Additive v, R2 v, Num n) => Transformation v n+_reflectionXY = fromSymmetric $ (_xy %~ view _yx) <-> (_xy %~ view _yx)++_reflectXY :: (InSpace v n t, R2 v, Transformable t) => t -> t+_reflectXY = transform _reflectionXY++----------------------------------------------------------------------------------+-- Single bar state API+----------------------------------------------------------------------------------++-- | A add 'BarPlot' to an 'Axis'.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_barExample.svg#diagram=barExample&height=400>>+--+-- > import Plots+-- > barAxis :: Axis B V2 Double+-- > barAxis = r2Axis &~ do+-- > yMin ?= 0+-- > hide majorGridLines+-- > barPlot [13.5, 3.0, 6.9, 7.2, 4.6] $ do+-- > vertical .= True+-- > barWidth //= 2+--+-- > barExample = renderAxis barAxis+barPlot+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f)+ => f n -- ^ bar heights+ -> State (Plot (BarPlot n) b) () -- ^ changes to the bars+ -> m () -- ^ changes to the 'Axis'+barPlot ns = addPlotable (mkBars def ns)++-- | Simple version of 'barPlot' without any modification to the 'Plot'.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_barExample'.svg#diagram=barExample'&height=400>>+--+-- > import Plots+-- > barAxis' :: Axis B V2 Double+-- > barAxis' = r2Axis &~ do+-- > xMin ?= 0+-- > hide (yAxis . majorGridLines)+-- > barPlot' [13.5, 3.0, 6.9, 7.2, 4.6]+--+-- > barExample' = renderAxis barAxis'+barPlot'+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f)+ => f n -- ^ bar heights+ -> m () -- ^ changes to the 'Axis'+barPlot' ns = addPlotable' (mkBars def ns)++-- | A add 'BarPlot' to an 'Axis' while naming the bars.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_namedBarExample.svg#diagram=namedBarExample&height=400>>+--+-- > import Plots+-- > namedBarAxis :: Axis B V2 Double+-- > namedBarAxis = r2Axis &~ do+-- > yMin ?= 0+-- > hide (xAxis . majorGridLines)+-- > namedBarPlot [("eggs", 12), ("bacon", 5), ("sausage", 9), ("beans", 3)] $ do+-- > vertical .= True+-- > barWidth //= 2+-- >+-- > namedBarExample = renderAxis namedBarAxis+namedBarPlot+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f)+ => f (String,n) -- ^ bar heights with name+ -> State (Plot (BarPlot n) b) () -- ^ changes to the bars+ -> m () -- ^ changes to the 'Axis'+namedBarPlot d s = do+ addPlot bp+ barLayoutAxisLabels (bp ^. barLayout) nms+ where+ (nms, xs) = unzip $ F.toList d+ bp = mkPlot (mkBars def xs) & execState s++-- | Simple version of 'namedBarPlot' without any modification to the 'Plot'.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_namedBarExample'.svg#diagram=namedBarExample'&height=400>>+--+-- > import Plots+-- > namedBarAxis' :: Axis B V2 Double+-- > namedBarAxis' = r2Axis &~ do+-- > xMin ?= 0+-- > hide majorGridLines+-- > namedBarPlot' [("eggs", 12), ("bacon", 5), ("sausage", 9), ("beans", 3)]+--+-- > namedBarExample' = renderAxis namedBarAxis'+namedBarPlot'+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f)+ => f (String,n) -- ^ bar heights with name+ -> m () -- ^ add plot to the 'Axis'+namedBarPlot' ns = namedBarPlot ns (return ())++-- | Same as 'barPlot' but with lower and upper bounds for the bars.+floatingBarPlot+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f)+ => f (n,n) -- ^ bar limits+ -> State (Plot (BarPlot n) b) () -- ^ changes to the bars+ -> m ()+floatingBarPlot ns = addPlotable (mkFloatingBars def ns)++------------------------------------------------------------------------+-- Multi bar state API+------------------------------------------------------------------------++-- Multi bar state -----------------------------------------------------++-- | The 'MultiBarState' is used to set the various options available+-- when building multiple bar plots together. The main functions used+-- to modify this state:+--+-- * To choose the way the bars are grouped together choose one of+--+-- * 'groupedBars' - Together in grouped (the default)+-- * 'stackedBars' - On on top of another+-- * 'stackedEqualBars' - 'stackedBars' with the same height+-- * 'runningBars' - each group of bars follows the last+--+-- * Modify the 'PlotOptions' and 'PlotStyle' of groups of bars with+-- 'onBars'.+--+-- * Modify the layout of the (groups of) bars with+--+-- * 'orientation' - Horizontal or vertical bars+-- * 'barWidth' - Width of each (group of) bar(s)+-- * 'barSpacing' - Space between each (group of) bar(s)+-- * 'barStart' - Start of centre of first bar+--+-- * Add labels to each (group of) bars with 'labelBars'.+--+data MultiBarState b n a = MultiBarState+ { mbsLayout :: BarLayout n+ -- ^ options for building bar plots++ , mbsMods :: [(a, Endo (PlotMods b V2 n))]+ -- ^ the data along with an adjustment to the plot properties++ , mbsLabels :: [String]+ -- ^ labels to be placed at the bottom of each bar++ , mbsBarFun :: BarLayout n -> [[n]] -> [BarPlot n]+ -- ^ function used to build bar plots+ }++type instance N (MultiBarState b n a) = n++instance HasOrientation (MultiBarState b n a) where+ orientation = barLayout . orientation++instance HasBarLayout (MultiBarState b n a) where+ barLayout = lens mbsLayout (\mbs l -> mbs {mbsLayout = l})++-- > import Plots+--+-- > groupedExample s = r2Axis &~ do+-- > yMin ?= 0+-- > hide (xAxis . majorGridLines)+-- > xLabel .= "breakfast item"+-- > hide minorTicks+-- > multiBars sortedData snd $ do+-- > vertical .= True+-- > barWidth //= 2+-- > labelBars (map fst breakfastData)+-- > onBars $ \(nm,_) -> key nm+-- > s+-- >+-- > -- show y values without decimal point+-- > yAxis . tickLabelFunction .= atMajorTicks (show . round)+-- > -- we should really force all major ticks to like on integers too+--+-- > groupedBarsExample = renderAxis $ groupedExample groupedBars+-- > groupedBarsExample' = renderAxis $ groupedExample (groupedBars' 0.7)+-- > stackedBarsExample = renderAxis $ groupedExample stackedBars+-- > stackedEqualBarsExample = renderAxis $ groupedExample (stackedEqualBars 10)+-- > runningBarsExample = renderAxis $ groupedExample $ do+-- > runningBars+-- > labelBars (map fst breakfastData ++ map fst breakfastData)++-- Adding to axis ------------------------------------------------------++multiFun :: Lens' (MultiBarState b n a) (BarLayout n -> [[n]] -> [BarPlot n])+multiFun = lens mbsBarFun (\mbs f -> mbs {mbsBarFun = f})++-- | Bars that are grouped together such that each group is a single+-- 'barWidth'. The bars in a group are touching, see groupedBars' to+-- reduce the width of individual bars.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_groupedBarsExample.svg#diagram=groupedBarsExample&height=400>>++groupedBars :: Fractional n => State (MultiBarState b n a) ()+groupedBars = groupedBars' 1++-- | Bars that are grouped together such that each group is a single+-- 'barWidth'. The parameter is the multiplier for the width of+-- individual bars, where @'groupedBars' 1 = groupedBars@ corresponds+-- to bars in a group touching. reduce the width of individual bars.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg#diagram=groupedBarsExample'&height=400>>+--+groupedBars' :: Fractional n => n -> State (MultiBarState b n a) ()+groupedBars' n = multiFun .= mkGroupedBars n++-- | Bars stacked on top of each other.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_stackedBarsExample.svg#diagram=stackedBarsExample&height=400>>+--+stackedBars :: Num n => State (MultiBarState b n a) ()+stackedBars = multiFun .= mkStackedBars++-- | Bars stacked on top of each other where every bar is the given+-- height.+--+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg#diagram=stackedEqualBarsExample&height=400>>+--+stackedEqualBars :: Fractional n => n -> State (MultiBarState b n a) ()+stackedEqualBars n = multiFun .= mkStackedEqualBars n++-- | Normal 'bars' where each data set follows the last.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_runningBarsExample.svg#diagram=runningBarsExample&height=400>>+--+runningBars :: Num n => State (MultiBarState b n a) ()+runningBars = multiFun .= \l xs -> mkRunningBars l (map (map (0,)) xs)++-- | Construct multiple bars, grouped together. See 'MultiBarState' for+-- details on how to customise how the bars are drawn.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Bar_multiBarExample.svg#diagram=multiBarExample&height=400>>+--+-- > import Plots+-- > breakfastData :: [(String, V2 Double)]+-- > breakfastData = [("eggs", V2 7 5), ("bacon", V2 5 4), ("sausage", V2 2 7), ("beans", V2 2 1)]+--+-- > sortedData = [ ("girls", breakfastData^..each._2._x)+-- > , ("boys", breakfastData^..each._2._y)+-- > ]+--+-- > multiBarAxis :: Axis B V2 Double+-- > multiBarAxis = r2Axis &~ do+-- > yMin ?= 0+-- > hide (xAxis . majorGridLines)+-- > hide minorTicks+-- > xLabel .= "breakfast item"+-- > multiBars sortedData snd $ do+-- > vertical .= True+-- > barWidth //= 2+-- > labelBars (map fst breakfastData)+-- > onBars $ \(nm,_) -> key nm+-- >+-- > -- show y values without decimal point+-- > yAxis . tickLabelFunction .= atMajorTicks (show . round)+-- > -- we should really force all major ticks to like on integers too+--+-- > multiBarExample = renderAxis multiBarAxis+multiBars+ :: (MonadState (Axis b V2 n) m,+ Plotable (BarPlot n) b,+ Foldable f,+ Foldable g)+ => f a -- ^ data for multi plot+ -> (a -> g n) -- ^ extract bar heights from each data set+ -> State (MultiBarState b n a) () -- ^ state to make changes to the plot+ -> m () -- ^ changes to the 'Axis'+multiBars (F.toList -> as) f st = do+ -- add the plots+ F.forM_ propertiedBars $ \(b,endo) ->+ addPlotable b $ plotMods %= appEndo endo++ -- label bars on axis if necessary+ barLayoutAxisLabels (bs ^. barLayout) (bs ^. labels)+ where+ -- bars+ propertiedBars = zip barPlots endos+ barPlots = mbsBarFun bs (bs ^. barLayout) $ map (F.toList . f) as++ -- data and modifiers+ endos = mbsMods bs ^.. each . _2++ -- bar state+ bs = execState st bs0+ bs0 = MultiBarState+ { mbsLayout = def+ , mbsMods = map (\a -> (a, mempty)) as+ , mbsLabels = []+ , mbsBarFun = mkGroupedBars 1+ }++-- | Place labels under the centre of each bar using the 'BarLayout' by+-- changing that 'axisTickLabels', using the provided string in order.+barLayoutAxisLabels+ :: (MonadState (Axis b V2 n) m, Fractional n)+ => BarLayout n -> [String] -> m ()+barLayoutAxisLabels bl ls =+ unless (null ls) $+ axes . orient bl _y _x &= do+ majorTickPositions .= xs+ minorTicks . visible .= False+ tickLabelPositions .= zip xs ls+ where+ xs = map ((+ view barStart bl) . (* view barSpacing bl) . fromIntegral)+ [0 .. length ls - 1]++-- | Given the data for the bar, modify the properties for the bar that+-- uses that data.+--+-- Some common functions to use on the 'PlotMods':+--+-- * 'plotColour' - change the colour of the bars+--+-- * 'areaStyle' - modify the style of the bars+--+-- * 'key' - add a legend entry for that group of bars+--+onBars+ :: (a -> State (PlotMods b V2 n) ())+ -- ^ Modifier the 'PlotOptions' and 'PlotStyle' for the bars+ -- associated with the data from @a@.++ -> State (MultiBarState b n a) ()+ -- ^ Changes to each data set when executing 'multiBars'.+onBars f =+ mods . mapped %= \(a, endo) -> (a, endo <> Endo (execState (f a)))+ where mods = lens mbsMods (\bs d -> bs {mbsMods = d})++class HasLabels a where+ labels :: Lens' a [String]++instance HasLabels (MultiBarState b n a) where+ labels = lens mbsLabels (\mbs ls -> mbs {mbsLabels = ls})++-- | Labels to use for each bar (or group of bars) along the axis.+labelBars :: HasLabels a => [String] -> State a ()+labelBars xs = labels .= xs
+ src/Plots/Types/HeatMap.hs view
@@ -0,0 +1,598 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}++-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.HeatMap+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- A heat map is a graphical representation of data where the individual+-- values contained in a matrix are represented as colours.+--+-- <<diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg#diagram=heatMapIndexedExample&height=350>>+--+----------------------------------------------------------------------------++module Plots.Types.HeatMap+ ( -- * Heat map+ HeatMap+ , heatMap+ , heatMap'+ , heatMapIndexed+ , heatMapIndexed'++ -- * Lenses+ , HasHeatMap (..)++ -- ** Rendering functions+ , pathHeatRender+ , pixelHeatRender+ , pixelHeatRender'++ -- * Heat matrix+ , HeatMatrix+ , heatImage+ , hmPoints+ , hmSize++ -- * Low level construction+ , mkHeatMap+ , mkHeatMatrix+ , mkHeatMatrix'++ ) where++import Control.Lens hiding (transform, ( # ))+import qualified Data.Colour as C++import Control.Monad.ST+import Control.Monad.State+import qualified Data.Foldable as F+import Data.Typeable+import qualified Data.Vector.Generic.Mutable as M+import qualified Data.Vector.Storable as S+import qualified Data.Vector.Unboxed as V+import Data.Word (Word8)+import Statistics.Function (minMax)++import Codec.Picture+import Diagrams.Coordinates.Isomorphic+import Diagrams.Prelude++import Plots.Axis+import Plots.Style+import Plots.Types++------------------------------------------------------------------------+-- Heatmap+------------------------------------------------------------------------++-- | 2D Array of 'Double's.+data HeatMatrix = HeatMatrix+ { hmSize :: {-# UNPACK #-} !(V2 Int)+ -- ^ The size of heat matrix.+ , _hmVector :: {-# UNPACK #-} !(Vector Double)+ , hmBoundLower :: {-# UNPACK #-} !Double+ , hmBoundUpper :: {-# UNPACK #-} !Double+ }++-- | Construct a heat matrix from a size and a generating function.+mkHeatMatrix :: V2 Int -> (V2 Int -> Double) -> HeatMatrix+mkHeatMatrix s@(V2 x y) f = runST $ do+ mv <- M.new (x*y)++ let go !q !a !b !i !j+ | j == y = do v <- V.unsafeFreeze mv+ return (HeatMatrix s v a b)+ | i == x = go q a b 0 (j + 1)+ | otherwise = do let !d = f (V2 i j)+ M.unsafeWrite mv q d+ go (q + 1) (min a d) (max b d) (i + 1) j++ go 0 (1/0) (-1/0) 0 0+{-# INLINE mkHeatMatrix #-}++-- | Construct a heat matrix from a foldable of foldables.+--+-- @+-- 'mkHeatMatrix'' :: [['Double']] -> 'HeatMatrix'+-- 'mkHeatMatrix'' :: ['Vector' 'Double'] -> 'HeatMatrix'+-- @+mkHeatMatrix' :: (Foldable f, Foldable g) => f (g Double) -> HeatMatrix+mkHeatMatrix' xss = HeatMatrix (V2 x y) vd a b+ where+ (a,b) = minMax vd+ vd = V.create $ do+ mv <- M.new (x*y)+ let go !_ [] = return mv+ go j (r:rs) = V.unsafeCopy (M.unsafeSlice (j*x) x mv) r >> go (j-1) rs+ go (y - 1) vs+ -- vs is in reverse since we used foldl' to build it+ (!x,!y,!vs) = F.foldl' f (maxBound,0,[]) xss+ f (!i,!j,!ss) xs = let !v = V.fromList (F.toList xs)+ in (min i (V.length v), j+1, v : ss)++-- | Indexed traversal over the values of a 'HeatMatrix'.+hmPoints :: IndexedTraversal' (V2 Int) HeatMatrix Double+hmPoints f (HeatMatrix e@(V2 x y) v a b) =+ go 0 0 0 <&> \vs ->+ let v'= V.fromListN (x*y) vs+ in HeatMatrix e v' a b+ where+ -- V2 x y = hmExtent+ go !s !i !j+ | i >= x = go s 0 (j+1)+ | j >= y = pure []+ | otherwise = (:) <$> indexed f (V2 i j) (V.unsafeIndex v s)+ <*> go (s+1) (i+1) j+{-# INLINE [0] hmPoints #-}++{-# RULES+ "hmPoints/foldr"+ hmPoints = ifoldring hmFold :: Getting (Endo r) HeatMatrix Double;+ "hmPoints/ifoldr"+ hmPoints = ifoldring hmFold :: IndexedGetting (V2 Int) (Endo r) HeatMatrix Double+ #-}++hmFold :: (V2 Int -> Double -> b -> b) -> b -> HeatMatrix -> b+hmFold f b0 (HeatMatrix (V2 x y) v _ _) = go 0 0 0 b0 where+ go !s !i !j b+ | i >= x = go s 0 (j+1) b+ | j >= y = b+ | otherwise = f (V2 i j) (V.unsafeIndex v s) (go (s+1) (i+1) j b)+{-# INLINE hmFold #-}++-- Rendering heat matrices --------------------------------------------++-- | Render an heatmap as an 'ImageRGB8'.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg#diagram=pixelHeatRenderExample&height=350>>+--+-- > import Plots+-- >+-- > pixelHeatRenderExample =+-- > let f (V2 x y) = fromIntegral x + fromIntegral y+-- > myHM = mkHeatMatrix (V2 5 5) f+-- > in pixelHeatRender myHM viridis+--+pixelHeatRender+ :: (Renderable (DImage n Embedded) b, TypeableFloat n)+ => HeatMatrix+ -> ColourMap+ -> QDiagram b V2 n Any+pixelHeatRender hm cm =+ alignBL . image $ DImage (ImageRaster (ImageRGB8 img)) x y mempty+ where+ img = heatImage hm cm+ V2 x y = hmSize hm++-- | Render an heatmap as an 'ImageRGB8' with @n@ pixels per heat matrix+-- point.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg#diagram=pixelHeatRenderExample'&height=350>>+--+-- > import Plots+-- >+-- > pixelHeatRenderExample' =+-- > let f (V2 x y) = fromIntegral x + fromIntegral y+-- > myHM = mkHeatMatrix (V2 5 5) f+-- > in pixelHeatRender' 10 myHM viridis+--+pixelHeatRender'+ :: (Renderable (DImage n Embedded) b, TypeableFloat n)+ => Int+ -> HeatMatrix+ -> ColourMap+ -> QDiagram b V2 n Any+pixelHeatRender' n hm cm =+ scale (1/fromIntegral n) . alignBL . image $ DImage (ImageRaster (ImageRGB8 img)) (x*n) (y*n) mempty+ where+ img = scaleImage n $ heatImage hm cm+ V2 x y = hmSize hm++-- | Scale an image so each pixel takes (n*n) pixels. This can be+-- usefull for using 'heatImage' on small heat matrixes to give a+-- sharper image.+scaleImage :: Int -> Image PixelRGB8 -> Image PixelRGB8+scaleImage n img | n == 1 = img+ | n == 0 = Image 0 0 S.empty+ | n < 0 = error "scaleImage: negative scale"+scaleImage n (Image x y v) = Image (n*x) (n*y) vn where+ !refV = V.fromList $ map (*3) [ i + n*x*j | i <- [0..n-1], j <- [0..n-1] ]+ !n3 = 3*n+ vn = S.create $ do+ mv <- M.new (n * n * S.length v)+ let go !q !i !s | q >= 3*x*y = return mv+ | i == x = go q 0 (s + 3*x*n*(n-1))+ go q i s = do+ let !r = S.unsafeIndex v q+ !g = S.unsafeIndex v (q+1)+ !b = S.unsafeIndex v (q+2)+ V.forM_ refV $ \ds -> do+ M.unsafeWrite mv (s + ds ) r+ M.unsafeWrite mv (s + ds + 1) g+ M.unsafeWrite mv (s + ds + 2) b+ go (q+3) (i+1) (s+n3)++ go 0 0 0++-- | Create an image of 'PixelsRGB8' using the heat matrix.+heatImage :: HeatMatrix -> ColourMap -> Image PixelRGB8+heatImage (HeatMatrix (V2 x y) dv a b) cm = Image x y v' where+ !cv = mkColourVector cm++ -- PixelRGB8 doesn't have an unboxed instance so we have to write each+ -- component manually.+ v' = S.create $ do+ mv <- M.new (3 * x * y)+ let !m = 256 / (b - a)+ go s i q+ | s == x-1 = do -- return mv+ let !d = V.unsafeIndex dv s+ let !o = 3 * (min 255 . max 0 . round $ (d - a) * m)+ M.unsafeWrite mv q (V.unsafeIndex cv o )+ M.unsafeWrite mv (q+1) (V.unsafeIndex cv (o+1))+ M.unsafeWrite mv (q+2) (V.unsafeIndex cv (o+2))+ return mv+ -- go (s+1) (i+1) (q+3)+ | i == x = go (s - 2*x) 0 q+ | otherwise = do+ let !d = V.unsafeIndex dv s+ let !o = 3 * (min 255 . max 0 . round $ (d - a) * m)+ M.unsafeWrite mv q (V.unsafeIndex cv o )+ M.unsafeWrite mv (q+1) (V.unsafeIndex cv (o+1))+ M.unsafeWrite mv (q+2) (V.unsafeIndex cv (o+2))+ go (s+1) (i+1) (q+3)+ go (x * (y-1)) 0 0++-- Make an unboxed colour map using 256 samples.+mkColourVector :: ColourMap -> Vector Word8+mkColourVector cm = V.create $ do+ mv <- M.new (3*256)++ let go i | i == 3*256 = return mv+ | otherwise = do+ let PixelRGB8 r g b = cm ^. ixColour (fromIntegral i / (3*256))+ . to colourToPixel+ M.unsafeWrite mv i r+ M.unsafeWrite mv (i+1) g+ M.unsafeWrite mv (i+2) b+ go (i+3)++ go 0++colourToPixel :: AlphaColour Double -> PixelRGB8+colourToPixel c = PixelRGB8 r g b+ where RGB r g b = toSRGB24 (c `C.over` black)++-- | Render the heat map as a collection squares made up of 'Trail's.+-- This method is compatible with all backends and should always look+-- sharp. However it can become slow and large for large heat maps.+--+-- It is recommended to use 'pathHeatRender' for small heat maps and+-- 'pixelHeatRender' for larger ones.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg#diagram=pathHeatRenderExample&height=350>>+--+-- > import Plots+-- >+-- > pathHeatRenderExample =+-- > let f (V2 x y) = fromIntegral x + fromIntegral y+-- > myHM = mkHeatMatrix (V2 5 5) f+-- > in pathHeatRender myHM viridis+--+pathHeatRender+ :: (Renderable (Path V2 n) b, TypeableFloat n)+ => HeatMatrix+ -> ColourMap+ -> QDiagram b V2 n Any+pathHeatRender hm@(HeatMatrix _ _ a b) cm = ifoldMapOf hmPoints mk hm # lwO 0+ where+ normalise d = toRational $ (d - a) / (b - a)+ mk v@(V2 i j) d =+ rect w h+ # alignTR+ # translate (fromIntegral <$> v ^+^ 1)+ # fcA (cm ^. ixColour (normalise d))+ where+ -- Squares that are not on the top left edge are slightly+ -- bigger to remove phantom gaps+ w | i == 0 = 1+ | otherwise = 1.5+ h | j == 0 = 1+ | otherwise = 1.5++------------------------------------------------------------------------+-- Heat matrix+------------------------------------------------------------------------++-- | A mapping from points in a 2D axis do 'Double's. These 'Double's+-- are converted to colours using the axis 'ColourMap'.+data HeatMap b n = HeatMap+ { hMatrix :: HeatMatrix+ , hStart :: P2 n+ , hSize :: V2 n+ , hGridSty :: Style V2 n+ , hGridVisible :: Bool+ , hLimits :: Maybe (Double,Double)+ , hDraw :: HeatMatrix -> ColourMap -> QDiagram b V2 n Any+ } deriving Typeable++type instance V (HeatMap b n) = V2+type instance N (HeatMap b n) = n++-- | Class of things that let you change the heatmap options.+class HasHeatMap f a b | a -> b where+ -- | Lens onto the heatmap options.+ heatMapOptions :: LensLike' f a (HeatMap b (N a))++ -- | Whether there should be grid lines draw for the heat map.+ --+ -- Default is 'False'.+ heatMapGridVisible :: Functor f => LensLike' f a Bool+ heatMapGridVisible = heatMapOptions . lens hGridVisible (\s b -> (s {hGridVisible = b}))++ -- | The style applied to the grid lines for the heat map, if they're+ -- visible.+ --+ -- Default is 'mempty'.+ heatMapGridStyle :: Functor f => LensLike' f a (Style V2 (N a))+ heatMapGridStyle = heatMapOptions . lens hGridSty (\s b -> (s {hGridSty = b}))++ -- | The size of each individual square in the heat map.+ --+ -- Default is @'V2' 1 1@.+ heatMapSize :: Functor f => LensLike' f a (V2 (N a))+ heatMapSize = heatMapOptions . lens hSize (\s b -> (s {hSize = b}))++ -- | The size of the full extend of the heat map.+ --+ -- Default is extent of the heat matrix.+ heatMapExtent :: (Functor f, Fractional (N a)) => LensLike' f a (V2 (N a))+ heatMapExtent = heatMapOptions . l where+ l f hm = f (hSize hm * s) <&> \x -> hm { hSize = x / s }+ where s = fmap fromIntegral (hmSize $ hMatrix hm)++ -- | The starting point at the bottom left corner of the heat map.+ --+ -- Default is 'origin'+ heatMapStart :: Functor f => LensLike' f a (P2 (N a))+ heatMapStart = heatMapOptions . lens hStart (\s b -> (s {hStart = b}))++ -- | The center point of the heat map.+ heatMapCentre :: (Functor f, Fractional (N a)) => LensLike' f a (P2 (N a))+ heatMapCentre = heatMapOptions . l where+ l f hm = f (hStart hm .+^ v) <&> \p -> hm { hStart = p .-^ v }+ where v = fmap fromIntegral (hmSize $ hMatrix hm) * hSize hm / 2++ -- | Limits @(a,b)@ used on the data such that @a@ is the start of the+ -- 'ColourMap' and @b@ is the end of the 'ColourMap'. Default is @(0,1)@.+ heatMapLimits :: Functor f => LensLike' f a (Maybe (Double, Double))+ heatMapLimits = heatMapOptions . lens hLimits (\s b -> (s {hLimits = b}))++ -- | Funtion used to render the heat map. See 'pathHeatRender' and+ -- 'pixelHeatRender'.+ --+ -- Default is 'pathHeatRender'.+ heatMapRender :: Functor f => LensLike' f a (HeatMatrix -> ColourMap -> QDiagram b V2 (N a) Any)+ heatMapRender = heatMapOptions . lens hDraw (\s b -> (s {hDraw = b}))++instance HasHeatMap f (HeatMap b n) b where+ heatMapOptions = id++instance (Functor f, HasHeatMap f a b) => HasHeatMap f (Plot a b) b where+ heatMapOptions = rawPlot . heatMapOptions++instance OrderedField n => Enveloped (HeatMap b n) where+ getEnvelope hm = getEnvelope (fromCorners p (p .+^ v))+ where p = view heatMapStart hm+ v = view heatMapExtent hm++instance (Typeable b, TypeableFloat n, Renderable (Path V2 n) b)+ => Plotable (HeatMap b n) b where+ renderPlotable s _sty HeatMap {..} =+ transform (s^.specTrans) $+ grid <> hDraw matrix' (s^.specColourMap)+ # transform (scaleV hSize)+ # moveTo hStart+ where+ --- TODO+ grid = mempty++ --- XXX need to give _range to the axis somehow (for colour bar range)+ matrix' = case hLimits of+ -- Just r@(a,b) -> (r, hMatrix { hmFun = (/ (b - a)) . (+a) . hmFun hMatrix })+ -- Nothing -> normaliseHeatMatrix hMatrix+ Just (a,b) -> hMatrix { hmBoundLower = a, hmBoundUpper = b }+ Nothing -> hMatrix++ -- XXX make better+ defLegendPic sty HeatMap {..} = square 5 # applyAreaStyle sty++scaleV :: (Additive v, Fractional n) => v n -> Transformation v n+scaleV v = fromLinear f f+ where f = (liftU2 (*) v) <-> (\u -> liftU2 (/) u v)++-- | Construct a 'Heatmap' using the given 'HeatMatrix'.+mkHeatMap :: (Renderable (Path V2 n) b, TypeableFloat n)+ => HeatMatrix -> HeatMap b n+mkHeatMap mat = HeatMap+ { hMatrix = mat+ , hStart = origin+ , hSize = V2 1 1+ , hGridSty = mempty+ , hGridVisible = False+ , hLimits = Nothing+ , hDraw = pathHeatRender+ }++-- Adding to axis ------------------------------------------------------++-- | Add a 'HeatMap' plot using the extent of the heatmap and a+-- generating function.+--+-- @+-- 'heatMap' :: [['Double']] -> 'State' ('Plot' ('HeatMap' b n)) () -> 'State' ('Axis' b 'V2' n) ()+-- @+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_heatMapExample.svg#diagram=heatMapExample&height=350>>+--+-- > import Plots+-- > heatMapAxis :: Axis B V2 Double+-- > heatMapAxis = r2Axis &~ do+-- > display colourBar+-- > axisExtend .= noExtend+-- >+-- > let xs = [[1,2,3],[4,5,6]]+-- > heatMap xs $ heatMapSize .= V2 10 10+--+-- > heatMapExample = renderAxis heatMapAxis+--+heatMap+ :: (Foldable f,+ Foldable g,+ TypeableFloat n,+ Typeable b,+ MonadState (Axis b V2 n) m,+ Renderable (Path V2 n) b)+ => f (g Double)+ -> State (Plot (HeatMap b n) b) ()+ -- ^ changes to plot options+ -> m () -- ^ add plot to 'Axis'+heatMap xss s = do+ let hm@(HeatMatrix _ _ a b) = mkHeatMatrix' xss+ addPlotable (mkHeatMap hm) s++ -- (don't like this way of doing it)+ colourBarRange .= over both realToFrac (a,b)++-- | Add a 'HeatMap' plot using the extent of the heatmap and a+-- generating function.+--+-- @+-- 'heatMap'' :: [['Double']] -> 'State' ('Axis' b 'V2' n) ()+-- @+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg#diagram=heatMapExample'&height=350>>+--+-- > import Plots+-- > heatMapAxis' :: Axis B V2 Double+-- > heatMapAxis' = r2Axis &~ do+-- > display colourBar+-- > axisExtend .= noExtend+-- > axisColourMap .= Plots.magma+-- >+-- > let xs = [[1,2,3],[4,5,6]]+-- > heatMap' xs+--+-- > heatMapExample' = renderAxis heatMapAxis'+--+heatMap'+ :: (Foldable f,+ Foldable g,+ TypeableFloat n,+ Typeable b,+ MonadState (Axis b V2 n) m,+ Renderable (Path V2 n) b)+ => f (g Double)+ -> m () -- ^ add plot to 'Axis'+heatMap' xss = heatMap xss (return ())++-- | Add a 'HeatMap' plot using the extent of the heatmap and a+-- generating function.+--+-- @+-- 'heatMapIndexed' :: 'V2' 'Int' -> ('V2' 'Int' -> 'Double') -> 'State' ('Plot' ('HeatMap' b n)) () -> 'State' ('Axis' b 'V2' n) ()+-- 'heatMapIndexed' :: ('Int', 'Int') -> (('Int', 'Int') -> 'Double') -> 'State' ('Plot' ('HeatMap' b n)) () -> 'State' ('Axis' b 'V2' n) ()+-- @+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg#diagram=heatMapIndexedExample&height=350>>+--+-- > import Plots+-- > heatMapIndexedAxis :: Axis B V2 Double+-- > heatMapIndexedAxis = r2Axis &~ do+-- > display colourBar+-- > axisExtend .= noExtend+-- >+-- > let f (V2 x y) = fromIntegral x + fromIntegral y+-- > heatMapIndexed (V2 3 3) f $ heatMapSize .= V2 10 10+--+-- > heatMapIndexedExample = renderAxis heatMapIndexedAxis+--+heatMapIndexed+ :: (VectorLike V2 Int i,+ TypeableFloat n,+ Typeable b,+ MonadState (Axis b V2 n) m,+ Renderable (Path V2 n) b)+ => i -- ^ extent of array+ -> (i -> Double) -- ^ heat from index+ -> State (Plot (HeatMap b n) b) ()+ -- ^ changes to plot options+ -> m () -- ^ add plot to 'Axis'+heatMapIndexed i f s = do+ let hm@(HeatMatrix _ _ a b) = mkHeatMatrix (view unvectorLike i) (f . view vectorLike)+ addPlotable (mkHeatMap hm) s++ -- (don't like this way of doing it)+ colourBarRange .= over both realToFrac (a,b)++-- | Add a 'HeatMap' plot using the extent of the heatmap and a+-- generating function without changes to the heap map options.+--+-- @+-- 'heatMapIndexed' :: 'V2' 'Int' -> ('V2' 'Int' -> 'Double') -> 'State' ('Axis' b 'V2' n) ()+-- 'heatMapIndexed' :: ('Int', 'Int') -> (('Int', 'Int') -> 'Double') -> 'State' ('Axis' b 'V2' n) ()+-- @+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg#diagram=heatMapIndexedExample'&height=350>>+--+-- > import Plots+-- > heatMapIndexedAxis' :: Axis B V2 Double+-- > heatMapIndexedAxis' = r2Axis &~ do+-- > display colourBar+-- > axisExtend .= noExtend+-- > axisColourMap .= Plots.magma+-- >+-- > let f (V2 x y) = fromIntegral x + fromIntegral y+-- > heatMapIndexed' (V2 3 3) f+--+-- > heatMapIndexedExample' = renderAxis heatMapIndexedAxis'+--+heatMapIndexed'+ :: (VectorLike V2 Int i,+ TypeableFloat n,+ Typeable b,+ MonadState (Axis b V2 n) m,+ Renderable (Path V2 n) b)+ => i -- ^ extent of array+ -> (i -> Double) -- ^ heat from index+ -> m () -- ^ add plot to 'Axis'+heatMapIndexed' i f = heatMapIndexed i f (return ())+
+ src/Plots/Types/Histogram.hs view
@@ -0,0 +1,417 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}++-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.Histogram+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable++-- A histogram is a graphical representation of the distribution of+-- numerical data. It is an estimate of the probability distribution of+-- a continuous variable.+--+----------------------------------------------------------------------------++module Plots.Types.Histogram+ (+ -- * Histogram plot+ HistogramPlot++ -- ** Already computed histograms+ , computedHistogram++ -- ** Histogram options+ , HistogramOptions+ , HasHistogramOptions (..)++ -- ** Normalisation+ , NormalisationMethod+ , count+ , probability+ , countDensity+ , pdf+ , cumilative+ , cdf++ -- ** Plotting histograms+ , histogramPlot+ , histogramPlot'+ , histogramPlotOf+ , histogramPlotOf'++ -- * Low level constructors+ , mkComputedHistogram+ , mkHistogramPlot+ ) where++import Control.Monad.State.Lazy++import qualified Data.Foldable as F+import Data.Function+import Data.Maybe+import Data.Typeable++import qualified Data.Vector as V+import qualified Statistics.Sample.Histogram as Stat++import Diagrams.Core.Transform (fromSymmetric)+import Diagrams.Prelude+import Linear.V2 (_yx)++import Plots.Axis+import Plots.Style+import Plots.Types+import Plots.Util+++-- | Construct a rectangle of size v with the bottom left at point p.+rectBL :: (InSpace V2 n t, TrailLike t) => Point V2 n -> V2 n -> t+rectBL p (V2 x y) =+ trailLike $ fromOffsets [V2 x 0, V2 0 y, V2 (-x) 0] # closeTrail `at` p++------------------------------------------------------------------------+-- GHistogram plot+------------------------------------------------------------------------++-- | Simple histogram type supporting uniform bins.+data HistogramPlot n = HistogramPlot+ { hWidth :: n+ , hStart :: n+ , hValues :: [n]+ , hOrient :: Orientation+ } deriving Typeable++type instance V (HistogramPlot n) = V2+type instance N (HistogramPlot n) = n++instance OrderedField n => Enveloped (HistogramPlot n) where+ getEnvelope HistogramPlot {..} =+ -- don't like this reduntent code+ getEnvelope . orient hOrient _reflectXY id . (id :: Path v n -> Path v n) $+ ifoldMap drawBar hValues+ where+ drawBar i h = rectBL (mkP2 x 0) (V2 hWidth h)+ where x = hStart + fromIntegral i * hWidth++instance (TypeableFloat n, Renderable (Path V2 n) b)+ => Plotable (HistogramPlot n) b where+ renderPlotable s sty HistogramPlot {..} =+ ifoldMap drawBar hValues+ # orient hOrient _reflectXY id+ # applyAreaStyle sty+ # transform (s^.specTrans)+ where+ drawBar i h = rectBL (mkP2 x 0) (V2 hWidth h)+ where x = hStart + fromIntegral i * hWidth++ defLegendPic sty HistogramPlot {..}+ = centerXY+ . applyAreaStyle sty'+ . orient hOrient _reflectXY id+ $ alignB (rect 4 7) ||| alignB (rect 4 10) ||| alignB (rect 4 6)+ where+ -- The legend bars don't look right if the line width is too big so we limit it+ sty' = sty & areaStyle . _lw %~ atMost (local 0.8)++instance HasOrientation (HistogramPlot n) where+ orientation = lens hOrient $ \hp o -> hp {hOrient = o}++------------------------------------------------------------------------+-- Simple histogram plot+------------------------------------------------------------------------++-- | Plot an already computed histogram with equally sized bins.+computedHistogram+ :: (MonadState (Axis b V2 n) m,+ Plotable (HistogramPlot n) b,+ Foldable f)+ => n -- ^ start of first bin+ -> n -- ^ width of each bin+ -> f n -- ^ heights of the bins+ -> State (Plot (HistogramPlot n) b) ()+ -> m ()+computedHistogram x0 w xs = addPlotable (mkComputedHistogram x0 w xs)++-- | Construct a 'HistogramPlot' from raw histogram data.+mkComputedHistogram+ :: Foldable f+ => n -- ^ start of first bin+ -> n -- ^ width of each bin+ -> f n -- ^ heights of the bins+ -> HistogramPlot n+mkComputedHistogram x0 w xs = HistogramPlot x0 w (F.toList xs) Horizontal++----------------------------------------------------------------------------+-- Building histograms+----------------------------------------------------------------------------++-- example setup+-- > import Plots+-- > sampleData :: [Double]+-- > sampleData =+-- > [5.1,4.9,4.7,4.6,5.0,5.4,4.6,5.0,4.4,4.9+-- > ,5.4,4.8,4.8,4.3,5.8,5.7,5.4,5.1,5.7,5.1+-- > ,5.4,5.1,4.6,5.1,4.8,5.0,5.0,5.2,5.2,4.7+-- > ,4.8,5.4,5.2,5.5,4.9,5.0,5.5,4.9,4.4,5.1+-- > ,5.0,4.5,4.4,5.0,5.1,4.8,5.1,4.6,5.3,5.0+-- > ,7.0,6.4,6.9,5.5,6.5,5.7,6.3,4.9,6.6,5.2+-- > ,5.0,5.9,6.0,6.1,5.6,6.7,5.6,5.8,6.2,5.6+-- > ,5.9,6.1,6.3,6.1,6.4,6.6,6.8,6.7,6.0,5.7+-- > ,5.5,5.5,5.8,6.0,5.4,6.0,6.7,6.3,5.6,5.5+-- > ,5.5,6.1,5.8,5.0,5.6,5.7,5.7,6.2,5.1,5.7+-- > ,6.3,5.8,7.1,6.3,6.5,7.6,4.9,7.3,6.7,7.2+-- > ,6.5,6.4,6.8,5.7,5.8,6.4,6.5,7.7,7.7,6.0+-- > ,6.9,5.6,7.7,6.3,6.7,7.2,6.2,6.1,6.4,7.2+-- > ,7.4,7.9,6.4,6.3,6.1,7.7,6.3,6.4,6.0,6.9+-- > ,6.7,6.9,5.8,6.8,6.7,6.7,6.3,6.5,6.2,5.9+-- > ]+--+-- > mkNmExample nm = r2Axis &~ do+-- > yMin ?= 0+-- > histogramPlot sampleData $ do+-- > normaliseSample .= nm+-- > countDia = renderAxis $ mkNmExample count+-- > probabilityDia = renderAxis $ mkNmExample probability+-- > countDensityDia = renderAxis $ mkNmExample countDensity+-- > pdfDia = renderAxis $ mkNmExample pdf+-- > cumilativeDia = renderAxis $ mkNmExample cumilative+-- > cdfDia = renderAxis $ mkNmExample cdf++-- Histogram options ---------------------------------------------------++-- | The way to normalise the data from a histogram. The default method+-- is 'count'.+newtype NormalisationMethod =+ NM { runNM :: forall n. Fractional n => n -> V.Vector n -> V.Vector n }+ -- width -> heights -> normalised heights++instance Default NormalisationMethod where+ def = count++-- | The height of each bar is the number of observations. This is the+-- 'Default' method.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_countDia.svg#diagram=countDia&height=350>>+count :: NormalisationMethod+count = NM $ \_ v -> v++-- | The sum of the heights of the bars is equal to 1.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_probabilityDia.svg#diagram=probabilityDia&height=350>>+probability :: NormalisationMethod+probability = NM $ \_ v -> v ^/ V.sum v++-- | The height of each bar is @n / w@ where @n@ is the number of+-- observations and @w@ is the total width.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_countDensityDia.svg#diagram=countDensityDia&height=350>>+countDensity :: NormalisationMethod+countDensity = NM $ \w v -> v ^/ w++-- | The total area of the bars is @1@. This gives a probability density+-- function estimate.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_pdfDia.svg#diagram=pdfDia&height=350>>+pdf :: NormalisationMethod+pdf = NM $ \w v -> v ^/ (w * V.sum v)++-- | The height of each bar is the cumulative number of observations in+-- each bin and all previous bins. The height of the last bar is the+-- total number of observations.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_cumilativeDia.svg#diagram=cumilativeDia&height=350>>+cumilative :: NormalisationMethod+cumilative = NM $ \_ -> V.scanl1 (+)++-- | Cumulative density function estimate. The height of each bar is+-- equal to the cumulative relative number of observations in the bin+-- and all previous bins. The height of the last bar is 1.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_cdfDia.svg#diagram=cdfDia&height=350>>+cdf :: NormalisationMethod+cdf = NM $ \_ v -> V.scanl1 (+) v ^/ V.sum v++-- | Options for binning histogram data. For now only very basic+-- histograms building is supported.+data HistogramOptions n = HistogramOptions+ { hBins :: Int+ , hRange :: Maybe (n, n)+ , hNorm :: NormalisationMethod+ , oOrient :: Orientation+ }++type instance V (HistogramOptions n) = V2+type instance N (HistogramOptions n) = n++instance Default (HistogramOptions n) where+ def = HistogramOptions+ { hBins = 10+ , hRange = Nothing+ , hNorm = def+ , oOrient = Vertical+ }++instance HasOrientation (HistogramOptions n) where+ orientation = lens oOrient $ \ho o -> ho {oOrient = o}++class HasOrientation a => HasHistogramOptions a where+ -- | Options for building the histogram from data.+ histogramOptions :: Lens' a (HistogramOptions (N a))++ -- | The number of bins (bars) to use for the histogram. Must be+ -- positive.+ --+ -- 'Default' is @10@.+ numBins :: Lens' a Int+ numBins = histogramOptions . lens hBins (\ho n -> ho {hBins = n})++ -- | The range of data to consider when building the histogram. Any+ -- data outside the range is ignored.+ --+ -- 'Default' is 'Nothing'.+ binRange :: Lens' a (Maybe (N a, N a))+ binRange = histogramOptions . lens hRange (\ho r -> ho {hRange = r})++ -- | Should the resulting histogram be normalised so the total area is+ -- 1.+ --+ -- 'Default' is False.+ normaliseSample :: Lens' a NormalisationMethod+ normaliseSample = histogramOptions . lens hNorm (\ho b -> ho {hNorm = b})++instance HasHistogramOptions (HistogramOptions n) where+ histogramOptions = id++instance HasHistogramOptions a => HasHistogramOptions (Plot a b) where+ histogramOptions = rawPlot . histogramOptions++-- | Create a histogram by binning the data using the+-- 'HistogramOptions'.+mkHistogramPlot+ :: (Foldable f, RealFrac n)+ => HistogramOptions n -> f n -> HistogramPlot n+mkHistogramPlot HistogramOptions {..} xs =+ HistogramPlot+ { hWidth = w+ , hStart = a+ , hValues = V.toList $ runNM hNorm w ns+ , hOrient = Vertical+ }+ where+ w = (b - a) / fromIntegral hBins+ ns = Stat.histogram_ hBins a b v+ v = V.fromList (F.toList xs)+ (a,b) = fromMaybe (range hBins v) hRange++-- Taken from Statistics, which was limited to 'Double'.+range :: (Ord n, Fractional n)+ => Int -- ^ Number of bins (must be positive).+ -> V.Vector n -- ^ Sample data (cannot be empty).+ -> (n, n)+range nBins xs+ | nBins < 1 = error "Plots.Types.Histogram: invalid bin count"+ | V.null xs = error "Plots.Types.Histogram: empty sample"+ | lo == hi = case abs lo / 10 of+ a | a < 1e-6 -> (-1,1)+ | otherwise -> (lo - a, lo + a)+ | otherwise = (lo-d, hi+d)+ where+ d | nBins == 1 = 0+ | otherwise = (hi - lo) / ((fromIntegral nBins - 1) * 2)+ (lo,hi) = minMaxOf folded xs+{-# INLINE range #-}++-- |+-- mkWeightedHistogram+-- :: (Foldable f, OrderdField n)+-- => HistogramOptions n -> [(n, n)] -> HistogramPlot n+-- mkWeightedHistogram++------------------------------------------------------------------------+-- Histogram+------------------------------------------------------------------------++-- $ histogram+-- Histograms display data as barplot of x data, bin y data.+-- Box plots have the following lenses:+--+-- @+-- * 'setBin' :: 'Lens'' ('BoxPlot' v n) 'Double' - 10+-- @++-- | Add a 'HistogramPlot' to the 'AxisState' from a data set.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Histogram_histogramExample.svg#diagram=histogramExample&height=350>>+--+-- > import Plots+-- > histogramAxis :: Axis B V2 Double+-- > histogramAxis = r2Axis &~ do+-- > histogramPlot sampleData $ do+-- > key "histogram"+-- > plotColor .= blue+-- > areaStyle . _opacity .= 0.5+--+-- > histogramExample = renderAxis histogramAxis+histogramPlot+ :: (MonadState (Axis b V2 n) m, Plotable (HistogramPlot n) b, F.Foldable f, RealFrac n)+ => f n -- ^ data+ -> State (Plot (HistogramOptions n) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to axis+histogramPlot ns s = addPlot (hoPlot & rawPlot %~ \ho -> mkHistogramPlot ho ns)+ where hoPlot = mkPlot def &~ s++-- | Make a 'HistogramPlot' without changes to the plot options.+histogramPlot'+ :: (MonadState (Axis b V2 n) m, Plotable (HistogramPlot n) b, F.Foldable f, RealFrac n)+ => f n -- ^ data+ -> m () -- ^ add plot to axis+histogramPlot' d = histogramPlot d (return ())++-- | Add a 'HistogramPlot' using a fold over the data.+histogramPlotOf+ :: (MonadState (Axis b V2 n) m, Plotable (HistogramPlot n) b, RealFrac n)+ => Fold s n -- ^ fold over the data+ -> s -- ^ data to fold+ -> State (Plot (HistogramOptions n) b) () -- ^ change to the plot+ -> m () -- ^ add plot to the 'Axis'+histogramPlotOf f s = histogramPlot (toListOf f s)++-- | Same as 'histogramPlotOf' without any changes to the plot.+histogramPlotOf'+ :: (MonadState (Axis b V2 n) m, Plotable (HistogramPlot n) b, RealFrac n)+ => Fold s n -> s -> m ()+histogramPlotOf' f s = histogramPlotOf f s (return ())++-- temporary functions that will be in next lib release++_reflectionXY :: (Additive v, R2 v, Num n) => Transformation v n+_reflectionXY = fromSymmetric $ (_xy %~ view _yx) <-> (_xy %~ view _yx)++_reflectXY :: (InSpace v n t, R2 v, Transformable t) => t -> t+_reflectXY = transform _reflectionXY+
+ src/Plots/Types/Line.hs view
@@ -0,0 +1,177 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FunctionalDependencies #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.Line+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- A line plot is simply a 'Path' used as a plot. This module contains+-- helpers adding path plots. For line plots with markers, see+-- 'Plots.Types.Scatter'.+--+----------------------------------------------------------------------------++module Plots.Types.Line+ ( -- Plot trails/paths+ trailPlot+ , trailPlot'+ , pathPlot+ , pathPlot'++ -- * Line plots from points+ , linePlot+ , linePlot'+ , smoothLinePlot+ , smoothLinePlot'++ -- * Contruction utilities++ -- ** Trails+ , mkTrail+ , mkTrailOf++ -- ** Paths+ , mkPath+ , mkPathOf+++ ) where++import Control.Monad.State.Lazy++import qualified Data.Foldable as F++import Diagrams.Coordinates.Isomorphic+import Diagrams.Prelude++import Plots.Axis+import Plots.Types++------------------------------------------------------------------------+-- Trails and Paths+------------------------------------------------------------------------++-- | Add a 'Trail' as a 'Plot' to an 'Axis'.+trailPlot+ :: (BaseSpace c ~ v,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => Trail v n -- ^ trail to plot+ -> State (Plot (Path v n) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to the 'Axis'+trailPlot = pathPlot . toPath++-- | Add a 'Trail' as a 'Plot' to an 'Axis' without changes to the plot+-- options.+trailPlot'+ :: (BaseSpace c ~ v,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => Trail v n -- ^ trail to plot+ -> m () -- ^ add plot to the 'Axis'+trailPlot' = pathPlot' . toPath++-- | Add a 'Path' as a 'Plot' to an 'Axis'.+pathPlot+ :: (BaseSpace c ~ v,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => Path v n -- ^ path to plot+ -> State (Plot (Path v n) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to the 'Axis'+pathPlot = addPlotable++-- | Add a 'Path' as a 'Plot' to an 'Axis' without changes to the plot+-- options.+pathPlot'+ :: (BaseSpace c ~ v,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => Path v n -- ^ path to plot+ -> m () -- ^ add plot to the 'Axis'+pathPlot' = addPlotable'++------------------------------------------------------------------------+-- From list of points+------------------------------------------------------------------------++-- | Add a 'Path' plot from a list of points.+linePlot+ :: (BaseSpace c ~ v,+ Metric v,+ F.Foldable f,+ PointLike v n p,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => f p -- ^ points to turn into trail+ -> State (Plot (Path v n) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to the 'Axis'+linePlot = addPlotable . toPath . mkTrail++-- | Add a 'Path' plot from a list of points.+linePlot'+ :: (BaseSpace c ~ v,+ Metric v,+ F.Foldable f,+ PointLike v n p,+ Plotable (Path v n) b,+ MonadState (Axis b c n) m)+ => f p -- ^ points to turn into trail+ -> m () -- ^ add plot to the 'Axis'+linePlot' = addPlotable' . toPath . mkTrail++-- | Add a smooth 'Path' plot from a list of points using 'cubicSpline'.+smoothLinePlot+ :: (BaseSpace c ~ v,+ F.Foldable f,+ Metric v,+ PointLike v n p,+ Plotable (Path v n) b,+ Fractional (v n), -- needs fixing in diagrams-lib+ MonadState (Axis b c n) m)+ => f p -- ^ points to turn into trail+ -> State (Plot (Path v n) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to the 'Axis'+smoothLinePlot = addPlotable . cubicSpline False . toListOf (folded . unpointLike)++-- | Add a smooth 'Path' plot from a list of points using 'cubicSpline'+-- without changes to the plot options.+smoothLinePlot'+ :: (BaseSpace c ~ v,+ F.Foldable f,+ PointLike v n p,+ Plotable (Path v n) b,+ Fractional (v n), -- needs fixing in diagrams-lib+ MonadState (Axis b c n) m)+ => f p -- ^ points to turn into trail+ -> m () -- ^ add plot to the 'Axis'+smoothLinePlot' xs = smoothLinePlot xs (return ())++------------------------------------------------------------------------+-- Trail and path+------------------------------------------------------------------------++-- | Construct a localed trail from a list of folable of points.+mkTrail :: (PointLike v n p, OrderedField n, F.Foldable f) => f p -> Located (Trail v n)+mkTrail = mkTrailOf folded++-- | Construct a localed trail from a fold over points.+mkTrailOf :: (PointLike v n p, OrderedField n) => Fold s p -> s -> Located (Trail v n)+mkTrailOf f ps = fromVertices $ toListOf (f . unpointLike) ps++-- | Construct a localed trail from a fold over points.+mkPath :: (PointLike v n p, OrderedField n, F.Foldable f, F.Foldable g) => g (f p) -> Path v n+mkPath pss = toPath $ map mkTrail (F.toList pss)++-- | Construct a localed trail from a fold over points.+mkPathOf :: (PointLike v n p, OrderedField n) => Fold s t -> Fold t p -> s -> Path v n+mkPathOf f1 f2 as = Path $ map (mkTrailOf f2) (toListOf f1 as)+
+ src/Plots/Types/Pie.hs view
@@ -0,0 +1,306 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE ScopedTypeVariables #-}++{-# LANGUAGE UndecidableInstances #-}++{-# LANGUAGE StandaloneDeriving #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.Line+-- Copyright : (C) 2016 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- A pie plot is a circular statistical graphic, which is divided into+-- slices to illustrate numerical proportion.+--+-- <<diagrams/src_Plots_Types_Pie_piePlotExample.svg#diagram=piePlotExample&height=350>>+--+----------------------------------------------------------------------------++module Plots.Types.Pie+ ( -- * Pie plot+ PieState+ , piePlot+ , piePlot'+ , onWedges+ , wedgeKeys++ -- * Wedges+ , Wedge+ , mkWedge+ , HasWedge (..)+ , wedgePlot++ ) where++import Control.Monad.State.Lazy++import Data.Typeable+import qualified Data.Foldable as F+import qualified Data.List as List++import Diagrams.Coordinates.Isomorphic+import Diagrams.Coordinates.Polar+import Diagrams.Prelude hiding (r2)++import Plots.Style+import Plots.Types+import Plots.Axis++------------------------------------------------------------------------+-- Pie wedge+------------------------------------------------------------------------++-- | Contains information to draw a single wedge of a pie. It is not+-- intended to be draw directly. Instead use 'piePlot.+data Wedge n = Wedge+ { sEndR :: n+ , sStartR :: n+ , sOffset :: n+ , sDir :: Direction V2 n+ , sWidth :: Angle n+ } deriving Typeable++type instance V (Wedge n) = V2+type instance N (Wedge n) = n++instance RealFloat n => Enveloped (Wedge n) where+ getEnvelope Wedge {..} = getEnvelope shape # translate off where+ shape+ | sStartR == 0 = wedge sEndR sDir sWidth :: Path V2 n+ | otherwise = annularWedge sEndR sStartR sDir sWidth+ off+ | sOffset == 0 = zero+ | otherwise = sOffset *^ fromDir (rotate (sWidth ^/ 2) sDir)++instance (TypeableFloat n, Renderable (Path V2 n) b)+ => Plotable (Wedge n) b where+ renderPlotable s sty Wedge {..} =+ shape+ # applyAreaStyle sty+ # translate off+ # transform (s^.specTrans)+ where+ shape+ | sStartR == 0 = wedge sEndR sDir sWidth+ | otherwise = annularWedge sEndR sStartR sDir sWidth+ off+ | sOffset == 0 = zero+ | otherwise = sOffset *^ fromDir (rotate (sWidth ^/ 2) sDir)++ defLegendPic sty Wedge {..}+ = square 5 # applyAreaStyle sty++-- | Create a pie wedge with unit radius, starting at direction @d@ with+-- width @theta@.+mkWedge+ :: Num n+ => Direction V2 n -- ^ starting direction+ -> Angle n -- ^ width of wedge+ -> Wedge n -- ^ resulting wedge+mkWedge d theta = Wedge+ { sEndR = 1+ , sStartR = 0+ , sOffset = 0+ , sDir = d+ , sWidth = theta+ }++class HasWedge f a where+ -- | Description on how to draw a wedge.+ pieWedge :: LensLike' f a (Wedge (N a))++ -- | The outside radius of the wedge. Default is @1@.+ wedgeOuterRadius :: Functor f => LensLike' f a (N a)+ wedgeOuterRadius = pieWedge . lens sEndR (\p r -> p {sEndR = r})++ -- | The inside radius of the wedge. Default is $0$.+ wedgeInnerRadius :: Functor f => LensLike' f a (N a)+ wedgeInnerRadius = pieWedge . lens sStartR (\p r -> p {sStartR = r})++ -- | The offset of the wedge from the center.+ wedgeOffset :: Functor f => LensLike' f a (N a)+ wedgeOffset = pieWedge . lens sOffset (\p x -> p {sOffset = x})++ -- | The width of the wedge, starting from the 'wedgeDirection'.+ wedgeWidth :: Functor f => LensLike' f a (Angle (N a))+ wedgeWidth = pieWedge . lens sWidth (\p x -> p {sWidth = x})++ -- | The inititial direction of the wedge.+ wedgeDirection :: Functor f => LensLike' f a (Direction V2 (N a))+ wedgeDirection = pieWedge . lens sDir (\p x -> p {sDir = x})++instance HasWedge f (Wedge n) where+ pieWedge = id++instance (Functor f, HasWedge f a) => HasWedge f (Plot a b) where+ pieWedge = rawPlot . pieWedge++instance Applicative f => HasWedge f (PieState b n a) where+ pieWedge = stateMods . traversed . _2 . pieWedge++instance (Applicative f, Typeable b, v ~ V2, Typeable n)+ => HasWedge f (DynamicPlot b v n) where+ pieWedge = (dynamicPlot :: Traversal' (DynamicPlot b v n) (Plot (Wedge n) b))+ . pieWedge++instance (v ~ V2, Applicative f, Typeable n)+ => HasWedge f (StyledPlot b v n) where+ pieWedge = (styledPlot :: Traversal' (StyledPlot b v n) (Wedge n))++instance (BaseSpace c ~ V2, Settable f, Typeable n)+ => HasWedge f (Axis b c n) where+ pieWedge = finalPlots . pieWedge++------------------------------------------------------------------------+-- Full pie+------------------------------------------------------------------------++-- | The state used to draw a part chart made of multiple pie wedges.+data PieState b n a = PieState+ { psMods :: [(a, Plot (Wedge n) b)] -- non-empty list+ }++type instance V (PieState b n a) = V2+type instance N (PieState b n a) = n++-- internal lens+stateMods :: Lens' (PieState b n a) [(a, Plot (Wedge n) b)]+stateMods = lens psMods (\ps ms -> ps {psMods = ms})++-- -- | The direction for the first entry in the pie. Default is 'xDir'.+-- startingDirection :: Lens' (PieState b n a) (Direction V2 n)+-- startingDirection = lens psStart (\ps d -> ps {psStart = d})++-- -- | The ending direction of the final wedge. This can be used to make a+-- finalDirection ::++-- | Modify the state for each wedge given the data entry.+--+-- Some common lenses to use on the 'Wedge':+--+-- * 'plotColour' - change the colour of the bars+--+-- * 'areaStyle' - modify the style of the bars+--+-- * 'key' - add a legend entry for that group of bars+--+-- * 'wedgeOffset' - the offset of the wedge from the center+--+onWedges :: (a -> State (Plot (Wedge n) b) ()) -> State (PieState b n a) ()+onWedges f = stateMods %= map (\(a, p) -> (a, execState (f a) p))++-- | Add a legend entry for each item given a function that extracts the+-- item's name.+wedgeKeys :: Num n => (a -> String) -> State (PieState b n a) ()+wedgeKeys f = onWedges $ \a -> key (f a)++-- | Make a pie plot from a list of data by making a series of wedge+-- plots.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Pie_piePlotExample.svg#diagram=piePlotExample&height=350>>+--+-- > import Plots+-- >+-- > pieData = [("red", 3), ("blue", 4), ("green", 2), ("purple", 5)]+-- >+-- > piePlotAxis :: Axis B Polar Double+-- > piePlotAxis = polarAxis &~ do+-- > piePlot pieData snd $ wedgeKeys fst+-- > hide (axes . traversed)+--+-- > piePlotExample = renderAxis piePlotAxis+piePlot+ :: (MonadState (Axis b Polar n) m,+ Plotable (Wedge n) b,+ Foldable f)+ => f a -- ^ data for each wedge+ -> (a -> n) -- ^ extract weight of each wedge+ -> State (PieState b n a) ()+ -> m ()+piePlot (F.toList -> as) f st = F.forM_ ps addPlot+ where+ -- calculate pie widths+ ns = map f as+ x = F.sum ns+ wedges = snd $ List.mapAccumR wedgeAccum xDir as+ wedgeAccum d a = (d', wdg)+ where theta = (f a / x) @@ turn+ d' = d # rotate theta+ wdg = mkWedge d theta++ -- run pie state+ ps = map snd . psMods $ execState st ps0+ ps0 = PieState { psMods = zip as (map mkPlot wedges) }++-- | Make a pie plot from list of values without any changes.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Pie_pieExample'.svg#diagram=pieExample'&height=350>>+--+-- > import Plots+-- >+-- > piePlotAxis' :: Axis B Polar Double+-- > piePlotAxis' = polarAxis &~ do+-- > piePlot' [1,3,5,2]+-- > wedgeInnerRadius .= 0.5+-- > hide (axes . traversed)+--+-- > pieExample' = renderAxis piePlotAxis'+piePlot'+ :: (MonadState (Axis b Polar n) m,+ Plotable (Wedge n) b,+ Foldable f)+ => f n -- ^ weight of each wedge+ -> m ()+piePlot' ns = piePlot ns id (return ())++------------------------------------------------------------------------+-- Wedge+------------------------------------------------------------------------++-- $ pieplot+-- Pie plots display data as wedges and annular wedges.+-- Pie plots have the following lenses:+--+-- @+-- * 'strokeArc' :: 'Lens'' ('BoxPlot' v n) 'Bool' - False+-- @++-- | Add a single 'PiePlot' to the 'AxisState' from a data set.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Pie_wedgeExample.svg#diagram=wedgeExample&height=350>>+--+-- > import Plots+-- >+-- > wedgePlotAxis :: Axis B Polar Double+-- > wedgePlotAxis = polarAxis &~ do+-- > wedgePlot xDir (38@@deg) $ key "wedge"+--+-- > wedgeExample = renderAxis wedgePlotAxis+wedgePlot+ :: (v ~ BaseSpace c, v ~ V2,+ PointLike v n (Polar n),+ MonadState (Axis b c n) m,+ Plotable (Wedge n) b+ )+ => Direction V2 n -> Angle n -> State (Plot (Wedge n) b) () -> m ()+wedgePlot r theta = addPlotable (mkWedge r theta)+
+ src/Plots/Types/Scatter.hs view
@@ -0,0 +1,502 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Plots.Types.Scatter+-- Copyright : (C) 2015 Christopher Chalmers+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Christopher Chalmers+-- Stability : experimental+-- Portability : non-portable+--+-- A scatter plot is a type of mathematical diagram using Cartesian+-- coordinates to display values for typically two variables for a set+-- of data.+--+-- <<diagrams/src_Plots_Types_Scatter_scatterExample.svg#diagram=scatterExample&height=350>>+--+----------------------------------------------------------------------------+module Plots.Types.Scatter+ ( -- * Scatter plot+ ScatterPlot++ -- * Scatter plot lenses+ , ScatterOptions+ , HasScatterOptions (..)+ , HasConnectingLine (..)++ -- * Basic scatter plot+ -- ** Add plots to the axis+ , scatterPlot+ , scatterPlot'+ , scatterPlotOf+ , scatterPlotOf'++ -- * Scatter options+ , scatterOptions++ -- * Bubble plots+ , bubblePlot+ , bubblePlot'+ , bubblePlotOf+ , bubblePlotOf'++ -- ** Bubble options+ , BubbleOptions+ , bubbleOptions+ , bubbleTransform+ , bubbleStyle++ -- ** General scatter plot+ , gscatterPlot+ , gscatterOptionsFor++ -- * Low level construction+ , mkScatterOptions+ ) where++import Control.Lens hiding (lmap, transform, ( # ))+import Control.Monad.State.Lazy++import qualified Data.Foldable as F+import Data.Typeable++import Diagrams.Coordinates.Isomorphic+import Diagrams.Prelude hiding (view)++import Plots.Axis+import Plots.Style+import Plots.Types++-- config+-- > import Plots++------------------------------------------------------------------------+-- General scatter plot+------------------------------------------------------------------------++-- | A general data type for scatter plots. Allows storing different+-- types of data as well as allowing transforms depending on the data.+data ScatterPlot v n where+ ScatterPlot :: Typeable a => ScatterOptions v n a -> ScatterPlot v n+ deriving Typeable++type instance V (ScatterPlot v n) = v+type instance N (ScatterPlot v n) = n++-- | A general data type for scatter plots. Allows storing different+-- types of data as well as allowing transforms depending on the data.+data ScatterOptions v n a = ScatterOptions+ { oData :: [a]+ , oPos :: a -> Point v n+ , oTr :: a -> Transformation v n+ , oSty :: a -> Style v n+ , oLine :: Bool+ } deriving Typeable++type instance V (ScatterOptions v n a) = v+type instance N (ScatterOptions v n a) = n++instance (Metric v, OrderedField n) => Enveloped (ScatterPlot v n) where+ getEnvelope (ScatterPlot (ScatterOptions {..})) = getEnvelope (map oPos oData)++instance (TypeableFloat n, Renderable (Path V2 n) b)+ => Plotable (ScatterPlot V2 n) b where+ renderPlotable s sty (ScatterPlot (ScatterOptions {..})) =+ markers <> line+ where+ markers = foldMap mk oData # applyMarkerStyle sty+ --+ mk a = marker # transform (oTr a)+ # applyStyle (oSty a)+ # moveTo (specPoint s $ oPos a)+ marker = sty ^. plotMarker+ --+ line+ | not oLine = mempty+ | otherwise = fromVertices points # applyLineStyle sty+ points = map (specPoint s . oPos) oData++ defLegendPic sty (ScatterPlot (ScatterOptions {..})) =+ sty ^. plotMarker+ & applyMarkerStyle sty++------------------------------------------------------------------------+-- Generating scatter options+------------------------------------------------------------------------++-- | Low level construction of 'ScatterOptions'.+mkScatterOptions+ :: (PointLike v n p, Foldable f, Fractional n)+ => f a+ -> (a -> p)+ -> ScatterOptions v n a+mkScatterOptions xs pf = ScatterOptions+ { oData = F.toList xs+ , oPos = view unpointLike . pf+ , oTr = mempty+ , oSty = const (_Wrapped ## mempty)+ , oLine = False+ }++------------------------------------------------------------------------+-- Scatter plot lenses+------------------------------------------------------------------------++-- | Class of things that have a 'LensLike' for a 'ScatterPlot' \'s+-- connecting line.+class HasConnectingLine f a where+ -- | 'LensLike' onto whether the scatter plot should have a connecting+ -- line between points. If the line is present, it uses the+ -- 'lineStyle' from the 'PlotStyle'.+ connectingLine :: Functor f => LensLike' f a Bool++instance HasConnectingLine f (ScatterOptions v n a) where+ connectingLine = lens oLine (\o b -> o {oLine = b})++instance HasConnectingLine f (ScatterPlot v n) where+ connectingLine f (ScatterPlot o@(ScatterOptions {..}))+ = f oLine <&> \b -> ScatterPlot o {oLine = b}++instance HasConnectingLine f p => HasConnectingLine f (Plot p b) where+ connectingLine = rawPlot . connectingLine++instance (Applicative f, Typeable b, Typeable v, Typeable n)+ => HasConnectingLine f (DynamicPlot b v n) where+ connectingLine = (dynamicPlot :: Traversal' (DynamicPlot b v n) (Plot (ScatterPlot v n) b))+ . connectingLine++instance (Applicative f, Typeable v, Typeable n)+ => HasConnectingLine f (StyledPlot b v n) where+ connectingLine = (styledPlot :: Traversal' (StyledPlot b v n) (ScatterPlot v n))+ . connectingLine++instance (Settable f, Typeable (BaseSpace c), Typeable n)+ => HasConnectingLine f (Axis b c n) where+ connectingLine = finalPlots . connectingLine++-- Options -------------------------------------------------------------++class HasScatterOptions f a d where+ -- | Lens onto the 'ScatterOptions' for a general scatter plot.+ gscatterOptions :: LensLike' f a (ScatterOptions (V a) (N a) d)++ -- | Apply a transform to the markers using the associated data.+ scatterTransform :: Functor f => LensLike' f a (d -> Transformation (V a) (N a))+ scatterTransform = gscatterOptions . lens oTr (\o tr -> o {oTr = tr})++ -- | Apply a style to the markers using the associated data.+ scatterStyle :: Functor f => LensLike' f a (d -> Style (V a) (N a))+ scatterStyle = gscatterOptions . lens oSty (\o sty -> o {oSty = sty})++ -- | Change the position of the markers depending on the data.+ scatterPosition :: Functor f => LensLike' f a (d -> Point (V a) (N a))+ scatterPosition = gscatterOptions . lens oPos (\o pos -> o {oPos = pos})++instance d ~ d' => HasScatterOptions f (ScatterOptions v n d) d' where+ gscatterOptions = id++instance (Applicative f, Typeable v, Typeable n, Typeable d)+ => HasScatterOptions f (ScatterPlot v n) d where+ gscatterOptions f s@(ScatterPlot p) =+ case eq p of+ Just Refl -> ScatterPlot <$> f p+ Nothing -> pure s+ where+ eq :: Typeable a => a -> Maybe (a :~: ScatterOptions v n d)+ eq _ = eqT++instance (Functor f, HasScatterOptions f p a) => HasScatterOptions f (Plot p b) a where+ gscatterOptions = rawPlot . gscatterOptions++instance (Applicative f, Typeable b, Typeable v, Typeable n, Typeable a)+ => HasScatterOptions f (DynamicPlot b v n) a where+ gscatterOptions = dynamicPlot . rawPlot++instance (Applicative f, Typeable b, Typeable (BaseSpace c), Typeable n, Typeable a)+ => HasScatterOptions f (Axis b c n) a where+ gscatterOptions = axisPlots . traverse . gscatterOptions+++-- Pure scatter lenses -------------------------------------------------++-- | Lens onto a scatter plot of points.+scatterOptions :: (InSpace v n a, HasScatterOptions f a (Point v n))+ => LensLike' f a (ScatterOptions v n (Point v n))+scatterOptions = gscatterOptions++-- -- | Lens onto a transform of a scatter plot of points. This is a+-- -- specialised version of 'scatterTransform' for better type+-- -- inference.+-- _scatterTransform+-- :: (InSpace v n a, PointLike v n p, Functor f, HasScatterOptions f a (Point v n))+-- => LensLike' f a (p -> Transformation v n)+-- _scatterTransform = scatterTransform . lmapping unpointLike++-- -- | Lens onto a transform of a scatter plot of points. This is a+-- -- specialised version of 'scatterPosition' for better type inference.+-- _scatterPosition+-- :: (InSpace v n a, PointLike v n p, Functor f, HasScatterOptions f a (Point v n))+-- => LensLike' f a (p -> p)+-- _scatterPosition = scatterPos . dimapping unpointLike pointLike++-- -- | Lens onto a style function of a scatter plot of points. This is a+-- -- specialised version of 'scatterStyle' for better type inference.+-- _scatterStyle+-- :: (InSpace v n a, PointLike v n p, Functor f, HasScatterOptions f a (Point v n))+-- => LensLike' f a (p -> Style v n)+-- _scatterStyle = scatterStyle . lmapping unpointLike++------------------------------------------------------------------------+-- Scatter plot+------------------------------------------------------------------------++-- $ scatter+-- Scatter plots display data as dots. There are several representations+-- for scatter plots for extra parameters. Scatter plots have the+-- following lenses:+--+-- * 'connectingLine' - line between points+-- *+--++-- | Add a 'ScatterPlot' to the 'AxisState' from a data set.+--+-- @+-- myaxis = r2Axis ~&+-- scatterPlot data1+-- @+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Scatter_scatterExample.svg#diagram=scatterExample&height=350>>+--+-- > import Plots+-- > mydata1 = [(1,3), (2,5.5), (3.2, 6), (3.5, 6.1)]+-- > mydata2 = mydata1 & each . _1 *~ 0.5+-- > mydata3 = [V2 1.2 2.7, V2 2 5.1, V2 3.2 2.6, V2 3.5 5]+--+-- > scatterAxis :: Axis B V2 Double+-- > scatterAxis = r2Axis &~ do+-- > scatterPlot mydata1 $ key "data 1"+-- > scatterPlot mydata2 $ key "data 2"+-- > scatterPlot mydata3 $ key "data 3"+--+-- > scatterExample = renderAxis scatterAxis+scatterPlot+ :: (BaseSpace c ~ v,+ PointLike v n p,+ Typeable n,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ F.Foldable f)+ => f p -- ^ points to plot+ -> State (Plot (ScatterOptions v n (Point v n)) b) ()+ -- ^ changes to plot options+ -> m () -- ^ add plot to 'Axis'+scatterPlot xs = gscatterPlot (xs ^.. folded . unpointLike) id++-- | Version of 'scatterPlot' without any changes to the+-- 'ScatterOptions'.+--+-- === __Example__+--+-- <<diagrams/src_Plots_Types_Scatter_scatterExample'.svg#diagram=scatterExample'&height=350>>+--+-- > import Plots+-- > mydata4 = [(1,3), (2,5.5), (3.2, 6), (3.5, 6.1)]+-- > mydata5 = mydata1 & each . _1 *~ 0.5+-- > mydata6 = [V2 1.2 2.7, V2 2 5.1, V2 3.2 2.6, V2 3.5 5]+--+-- > scatterAxis' :: Axis B V2 Double+-- > scatterAxis' = r2Axis &~ do+-- > scatterPlot' mydata4+-- > scatterPlot' mydata5+-- > scatterPlot' mydata6+--+-- > scatterExample' = renderAxis scatterAxis'+scatterPlot'+ :: (BaseSpace c ~ v,+ PointLike v n p,+ Typeable n,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ F.Foldable f)+ => f p -- ^ points to plot+ -> m () -- ^ add plot to 'Axis'+scatterPlot' xs = scatterPlot xs (return ())++-- | Version of 'scatterPlot' that accepts a 'Fold' over the data.+scatterPlotOf+ :: (BaseSpace c ~ v,+ PointLike v n p,+ Typeable n,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b)+ => Fold s p -- ^ fold over points+ -> s -- ^ data to fold+ -> State (Plot (ScatterOptions v n (Point v n)) b) () -- ^ changes to plot options+ -> m () -- ^ add plot to 'Axis'+scatterPlotOf f s = scatterPlot (toListOf f s)++-- | Version of 'scatterPlot' that accepts a 'Fold' over the data+-- without any changes to the 'ScatterOptions'.+scatterPlotOf'+ :: (BaseSpace c ~ v,+ PointLike v n p,+ Typeable n,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b)+ => Fold s p -- ^ fold over points+ -> s -- ^ data to fold+ -> m () -- ^ add plot to axis+scatterPlotOf' f s = scatterPlot' (toListOf f s)++------------------------------------------------------------------------+-- Bubble plot --+------------------------------------------------------------------------++-- | A bubble plot is a scatter plot using point together with a scalar.+type BubbleOptions v n = ScatterOptions v n (n, Point v n)++-- | Scatter plots with extra numeric parameter. By default the extra+-- parameter is the scale of the marker but this can be changed.+bubblePlot+ :: (BaseSpace c ~ v,+ PointLike v n p,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ Typeable n,+ Foldable f)+ => f (n, p) -- ^ fold over points with a size+ -> State (Plot (BubbleOptions v n) b) () -- ^ changes to the options+ -> m () -- ^ add plot to 'Axis'+bubblePlot xs s =+ gscatterPlot (xs ^.. folded . mapping unpointLike) snd $ do+ bubbleTransform .= scaling+ s++-- | Simple version of 'bubblePlot' without any changes to the 'Plot'.+bubblePlot'+ :: (v ~ BaseSpace c,+ PointLike v n p,+ Typeable n,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ Foldable f)+ => f (n, p) -- ^ fold over points with a size+ -> m () -- ^ add plot to 'Axis'+bubblePlot' xs = bubblePlot xs (return ())++-- | Version of 'bubblePlot' using a 'Fold' over the data.+bubblePlotOf+ :: (BaseSpace c ~ v,+ PointLike v n p,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ Typeable n)+ => Fold s (n,p) -- ^ fold over the data+ -> s -- ^ data+ -> State (Plot (BubbleOptions v n) b) ()+ -- ^ changes to the options+ -> m () -- ^ add plot to 'Axis'+bubblePlotOf f s = bubblePlot (toListOf f s)++-- | Version of 'bubblePlot' using a 'Fold' over the data without any+-- changes to the 'BubbleOptions'.+bubblePlotOf'+ :: (BaseSpace c ~ v,+ PointLike v n p,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ Typeable n)+ => Fold s (n,p) -- ^ fold over the data+ -> s -- ^ data+ -> State (Plot (BubbleOptions v n) b) ()+ -- ^ changes to the options+ -> m () -- ^ add plot to 'Axis'+bubblePlotOf' f s = bubblePlot (toListOf f s)++-- Bubble scatter lenses -----------------------------------------------++-- | LensLike onto into a 'ScatterOptions' made up of a scaler @n@, and+-- a point, @'Point' v n@+--+-- @+-- 'bubbleOptions' :: 'Lens'' ('Plot' ('BubbleOptions' v n) v) ('BubbleOptions' v n)+-- @+bubbleOptions :: (InSpace v n a, HasScatterOptions f a (n, Point v n))+ => LensLike' f a (BubbleOptions v n)+bubbleOptions = gscatterOptions++-- | Setter over the transform function for a 'bubblePlot'. Default is 'scale'.+--+-- @+-- 'bubbleOptions' :: 'Setter'' ('Plot' ('BubbleOptions' v n) v) (n -> 'Transformation' v n)+-- @+--+-- Note that this is the less general version of @'bubblePlot' .+-- 'scatterTransform'@, which would give a 'LensLike' onto @(n,+-- 'Point' v n) -> 'Transformation' v n@.+--+bubbleTransform+ :: (InSpace v n a, HasScatterOptions f a (n, Point v n), Settable f)+ => LensLike' f a (n -> Transformation v n)+bubbleTransform = bubbleOptions . scatterTransform . sets nOnly+ where nOnly f g (n,p) = f (\n' -> g (n', p)) n++-- | Setter over the style function for a 'bubblePlot'. Default is 'mempty'.+--+-- @+-- 'bubbleStyle' :: 'Setter'' ('Plot' ('BubbleOptions' v n) v) (n -> 'Style' v n)+-- @+--+-- Note that this is the less general version of @'bubblePlot' .+-- 'scatterTransform'@, which would give a 'LensLike' onto @(n,+-- 'Point' v n) -> 'Style' v n@.+--+bubbleStyle :: (InSpace v n a, Settable f, HasScatterOptions f a (n, Point v n))+ => LensLike' f a (n -> Style v n)+bubbleStyle = bubbleOptions . scatterStyle . sets nOnly+ where nOnly f g (n,p) = f (\n' -> g (n', p)) n++------------------------------------------------------------------------+-- General scatter plot+------------------------------------------------------------------------++-- | A general scatter plot allow using any data type @d@ to determine+-- the 'scatterTransform' and 'scatterStyle'.+gscatterPlot+ :: (BaseSpace c ~ v,+ PointLike v n p,+ MonadState (Axis b c n) m,+ Plotable (ScatterPlot v n) b,+ Typeable d,+ F.Foldable f)+ => f d -- ^ data+ -> (d -> p) -- ^ extract point from data+ -> State (Plot (ScatterOptions v n d) b) ()+ -- ^ options for plot+ -> m () -- ^ add plot to 'Axis'+gscatterPlot xs pf s = addPlot $ over rawPlot ScatterPlot p1+ where+ p1 = execState s p0+ p0 = mkPlot $ mkScatterOptions xs (view unpointLike . pf)++-- | Helper to traverse over a general scatter plot where the type of d+-- is not infered.+gscatterOptionsFor+ :: (InSpace v n a, HasScatterOptions f a d)+ => proxy d -> LensLike' f a (ScatterOptions v n d)+gscatterOptionsFor _ = gscatterOptions+
+ src/Plots/Util.hs view
@@ -0,0 +1,65 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}++module Plots.Util+ ( pathFromVertices+ , minMaxOf+ , enumFromToN+ , whenever++ -- * State helpers+ , (&=)+ , (&~~)+ ) where++import Control.Lens+import Control.Monad.State+import Data.Bool++import Diagrams.Prelude hiding (diff)++-- | Similar to '(%=)' but takes a state modification instead of a+-- function.+(&=) :: MonadState s m => ASetter' s b -> State b a -> m ()+l &= s = l %= execState s+infix 3 &=++-- | Similar to '(&~)' but works with 'StateT' and returns it in @m@.+(&~~) :: Monad m => s -> StateT s m a -> m s+l &~~ s = execStateT s l+infix 1 &~~++-- | @enumFromToN a b n@ calculates a list from @a@ to @b@ in @n@ steps.+enumFromToN :: Fractional n => n -> n -> Int -> [n]+enumFromToN a b n = go n a+ where+ go !i !x | i < 1 = [x]+ | otherwise = x : go (i - 1) (x + diff)+ diff = (b - a) / fromIntegral n++-- | Apply a function if the predicate is true.+whenever :: Bool -> (a -> a) -> a -> a+whenever b f = bool id f b++------------------------------------------------------------------------+-- Diagrams+------------------------------------------------------------------------++-- | Type specialised version of 'fromVertices'.+pathFromVertices :: (Metric v, OrderedField n) => [Point v n] -> Path v n+pathFromVertices = fromVertices+{-# INLINE pathFromVertices #-}++-- | Minmax of a getter in the form @V2 min max@. Returns @(V2+-- (-Infinity) Infinity)@ for empty folds.+minMaxOf :: (Fractional a, Ord a) => Getting (Endo (Endo (V2 a))) s a -> s -> (a,a)+minMaxOf l = foldlOf' l (\(V2 mn mx) a -> V2 (min mn a) (max mx a)) (V2 (1/0) (-1/0))+ <&> \(V2 x y) -> (x,y)+ -- (\acc a -> acc <**> V2 min max ?? a)+-- V2 is used instead of a tuple because V2 is strict.+{-# INLINE minMaxOf #-}+