diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+# plots
+
+[![Haddock](https://rawgit.com/cchalmers/plots/gh-pages/haddock.svg)](https://cchalmers.github.io/plots/)
+
+`plots` is a plotting library based on [diagrams](http://projects.haskell.org/diagrams).
+
+Some sample plots:
+
+#### Scatter plot
+![scatter-plot](https://rawgit.com/cchalmers/plots/master/diagrams/src_Plots_Types_Scatter_scatterExample'.svg)
+
+#### Bar plot
+![bar-plot](https://rawgit.com/cchalmers/plots/master/diagrams/src_Plots_Types_Bar_barExample'.svg)
+
+#### Heat map
+![heat-map](https://rawgit.com/cchalmers/plots/master/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg)
+
+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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg b/diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Axis_ColourBar_gradientColourBarExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg b/diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Axis_ColourBar_pathColourBarExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_blackAndWhitePic.svg b/diagrams/src_Plots_Style_blackAndWhitePic.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_blackAndWhitePic.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_fadedColourPic.svg b/diagrams/src_Plots_Style_fadedColourPic.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_fadedColourPic.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_greysBar.svg b/diagrams/src_Plots_Style_greysBar.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_greysBar.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_infernoBar.svg b/diagrams/src_Plots_Style_infernoBar.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_infernoBar.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_magmaBar.svg b/diagrams/src_Plots_Style_magmaBar.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_magmaBar.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_plasmaBar.svg b/diagrams/src_Plots_Style_plasmaBar.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_plasmaBar.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_viridisBar.svg b/diagrams/src_Plots_Style_viridisBar.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_viridisBar.svg
@@ -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>
diff --git a/diagrams/src_Plots_Style_vividColourPic.svg b/diagrams/src_Plots_Style_vividColourPic.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Style_vividColourPic.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_barExample'.svg b/diagrams/src_Plots_Types_Bar_barExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_barExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_barExample.svg b/diagrams/src_Plots_Types_Bar_barExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_barExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg b/diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_groupedBarsExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_groupedBarsExample.svg b/diagrams/src_Plots_Types_Bar_groupedBarsExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_groupedBarsExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_multiBarExample.svg b/diagrams/src_Plots_Types_Bar_multiBarExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_multiBarExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_namedBarExample'.svg b/diagrams/src_Plots_Types_Bar_namedBarExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_namedBarExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_namedBarExample.svg b/diagrams/src_Plots_Types_Bar_namedBarExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_namedBarExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_runningBarsExample.svg b/diagrams/src_Plots_Types_Bar_runningBarsExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_runningBarsExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_stackedBarsExample.svg b/diagrams/src_Plots_Types_Bar_stackedBarsExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_stackedBarsExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg b/diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Bar_stackedEqualBarsExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg b/diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_heatMapExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_heatMapExample.svg b/diagrams/src_Plots_Types_HeatMap_heatMapExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_heatMapExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg b/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg b/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_heatMapIndexedExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg b/diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_pathHeatRenderExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg b/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg b/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_HeatMap_pixelHeatRenderExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_cdfDia.svg b/diagrams/src_Plots_Types_Histogram_cdfDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_cdfDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_countDensityDia.svg b/diagrams/src_Plots_Types_Histogram_countDensityDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_countDensityDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_countDia.svg b/diagrams/src_Plots_Types_Histogram_countDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_countDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_cumilativeDia.svg b/diagrams/src_Plots_Types_Histogram_cumilativeDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_cumilativeDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_pdfDia.svg b/diagrams/src_Plots_Types_Histogram_pdfDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_pdfDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Histogram_probabilityDia.svg b/diagrams/src_Plots_Types_Histogram_probabilityDia.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Histogram_probabilityDia.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Pie_pieExample'.svg b/diagrams/src_Plots_Types_Pie_pieExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Pie_pieExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Pie_piePlotExample.svg b/diagrams/src_Plots_Types_Pie_piePlotExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Pie_piePlotExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Pie_wedgeExample.svg b/diagrams/src_Plots_Types_Pie_wedgeExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Pie_wedgeExample.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Scatter_scatterExample'.svg b/diagrams/src_Plots_Types_Scatter_scatterExample'.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Scatter_scatterExample'.svg
@@ -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>
diff --git a/diagrams/src_Plots_Types_Scatter_scatterExample.svg b/diagrams/src_Plots_Types_Scatter_scatterExample.svg
new file mode 100644
--- /dev/null
+++ b/diagrams/src_Plots_Types_Scatter_scatterExample.svg
@@ -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>
diff --git a/plots.cabal b/plots.cabal
new file mode 100644
--- /dev/null
+++ b/plots.cabal
@@ -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
diff --git a/src/Diagrams/Coordinates/Isomorphic.hs b/src/Diagrams/Coordinates/Isomorphic.hs
new file mode 100644
--- /dev/null
+++ b/src/Diagrams/Coordinates/Isomorphic.hs
@@ -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 #-}
+
diff --git a/src/Diagrams/Coordinates/Polar.hs b/src/Diagrams/Coordinates/Polar.hs
new file mode 100644
--- /dev/null
+++ b/src/Diagrams/Coordinates/Polar.hs
@@ -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 #-}
+
diff --git a/src/Plots.hs b/src/Plots.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots.hs
@@ -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
+
diff --git a/src/Plots/Axis.hs b/src/Plots/Axis.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis.hs
@@ -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
+  }
+
diff --git a/src/Plots/Axis/ColourBar.hs b/src/Plots/Axis/ColourBar.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/ColourBar.hs
@@ -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
+
diff --git a/src/Plots/Axis/Grid.hs b/src/Plots/Axis/Grid.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Grid.hs
@@ -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)
diff --git a/src/Plots/Axis/Labels.hs b/src/Plots/Axis/Labels.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Labels.hs
@@ -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
+
diff --git a/src/Plots/Axis/Line.hs b/src/Plots/Axis/Line.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Line.hs
@@ -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
+    }
+
diff --git a/src/Plots/Axis/Render.hs b/src/Plots/Axis/Render.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Render.hs
@@ -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
diff --git a/src/Plots/Axis/Scale.hs b/src/Plots/Axis/Scale.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Scale.hs
@@ -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)
+
diff --git a/src/Plots/Axis/Ticks.hs b/src/Plots/Axis/Ticks.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Ticks.hs
@@ -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
diff --git a/src/Plots/Axis/Title.hs b/src/Plots/Axis/Title.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Axis/Title.hs
@@ -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)
+
diff --git a/src/Plots/Legend.hs b/src/Plots/Legend.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Legend.hs
@@ -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))
diff --git a/src/Plots/Name.hs b/src/Plots/Name.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Name.hs
@@ -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')
+
diff --git a/src/Plots/Style.hs b/src/Plots/Style.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Style.hs
@@ -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
+  ]
+
diff --git a/src/Plots/Types.hs b/src/Plots/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types.hs
@@ -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
+
diff --git a/src/Plots/Types/Bar.hs b/src/Plots/Types/Bar.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/Bar.hs
@@ -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
diff --git a/src/Plots/Types/HeatMap.hs b/src/Plots/Types/HeatMap.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/HeatMap.hs
@@ -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 ())
+
diff --git a/src/Plots/Types/Histogram.hs b/src/Plots/Types/Histogram.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/Histogram.hs
@@ -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
+
diff --git a/src/Plots/Types/Line.hs b/src/Plots/Types/Line.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/Line.hs
@@ -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)
+
diff --git a/src/Plots/Types/Pie.hs b/src/Plots/Types/Pie.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/Pie.hs
@@ -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)
+
diff --git a/src/Plots/Types/Scatter.hs b/src/Plots/Types/Scatter.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Types/Scatter.hs
@@ -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
+
diff --git a/src/Plots/Util.hs b/src/Plots/Util.hs
new file mode 100644
--- /dev/null
+++ b/src/Plots/Util.hs
@@ -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 #-}
+
